• Как запустить python более младшей версии в virtualenv Из 3.8 в 3.6?

    @kurrbanov
    Пишу бэкенд на Питоне
    Например, использовать для этого pyenv
    https://github.com/pyenv/pyenv
    Ответ написан
    Комментировать
  • Как написать стили к Django полям?

    @kurrbanov
    Пишу бэкенд на Питоне
    Можно вообще не использовать {{ form.as_p }}
    Просто напиши внутри формы:
    <form method="POST">
    {% csrf_token %}
    <input name="название_поля_из_формы" class="className">
    </form>

    И стилизуй как хочешь
    Потом, когда ты POST-запрос отправишь через форму, эти данные будут хранится в request.POST, через который уже твоя форма будет эти данные читать.

    Например, я указал
    <input type="text" name="username">

    После отправки формы, я могу получить это значение во views.py:
    request.POST.get("username")
    И потом значения, которые мне пришли запихать в форму:
    form(request.POST)
    Ответ написан
    Комментировать
  • Redirect перезагрудает страницу, django, что делать?

    @kurrbanov
    Пишу бэкенд на Питоне
    Даже если вы здесь отловите ошибку, то как вам django отобразит её? У вас в HTML же нет отображения messages.
    except:
        messages.error(request, 'User is not exist')


    Добавьте этот код в html-форму:
    {% for message in messages %}
        <p>{{ message }}</p>
    {% endfor %}


    Видимо, он просто пользователя не находит и после того, как часть if request.method == "POST" отрабатывает, он просто возвращает на главную страницу:
    return render(request, 'base/login_registration.html', context)

    Если это так, то попробуйте посмотреть, что творится в БД, добавился ли созданный юзер туда вообще.

    Если это не помогло, то попробуйте попринтить, что выводят username и password.
    Ответ написан
    Комментировать
  • Как сохранить список в поле модели?

    @kurrbanov
    Пишу бэкенд на Питоне
    Отвечая на второй пункт:
    - "Сайт, который показывает погоду"
    - "зашёл, увидел список текущих городов, нажал добавить, вписал название, добавил."
    А если он добавит город, который не существует, то как тогда быть?

    Вообще для этой задачи нужна будет модель с городами, которые уже не пользователь должен добавлять, а администратор сайта/либо напрямую в через INSERT. От чего и вопросы на счёт такой реализации.

    И отвечая на первый пункт:
    Для списка любимых городов нужно будет создать связь многие ко многим между городом и пользователем.
    Здесь есть два варианта:
    1. Использовать ManyToMany в Django (https://docs.djangoproject.com/en/4.0/topics/db/ex...)
    2. Создать смежную таблицу, между двумя таблицами
    Ответ написан
    1 комментарий
  • Почти роли в Python с Flask-Login. Как ограничить доступ к одной странице для всех, кроме одного пользователя с id 5?

    @kurrbanov
    Пишу бэкенд на Питоне
    if User.query.get(5):
    Это условие просто проверит наличие админа в БД.

    А нужно провеять id текущего пользователя.
    from flask_login import login_required, current_user
    
    @app.route('/secret_page')
    @login_required
    def secret_page():
        if current_user.get_id() == 5:
            return render_template('test.html',  title='Страница',)
        return redirect(url_for('index'))
    Ответ написан
    1 комментарий
  • Почему функция возвращает None?

    @kurrbanov
    Пишу бэкенд на Питоне
    1. Оберните input() в int():
    s = int(input("Write 1 for today, 2 for yesterday and 3 for random date: "))


    2. И print здесь зачем? Он же ничего не возвращает, отсюда и переменная yesterday будет None.
    yesterday = print(date.today() + timedelta(days=-1)
    Ответ написан
    Комментировать
  • Не могу понять как решить ошибку?

    @kurrbanov
    Пишу бэкенд на Питоне
    c = (+,-,*,/)

    Естественно вы получите ошибку. Посмотрите для начала что может быть элементом кортежа.
    Спойлер:
    Математические операторы никогда ими не могут быть

    Вместо того, чтобы перечислять в кортеже математические операции, укажите их явно:
    c = (a + b, a - b, a * b, a / b)
    f = random.choice(c)
    print(f)
    Ответ написан
    Комментировать
  • Как реализовать задачу на пайтоне?

    @kurrbanov
    Пишу бэкенд на Питоне
    Решение за O(n + k), n - длина первой строки, k - длина второй строки:

    Создадим словарь, в котором будем хранить количество вхождений каждой из букв первого слова. Например, "hello", будет представлено в словаре:
    {
    'h' : 1,
    'e' : 1,
    'l' : 2,
    'o' : 1
    }

    Далее просто пробегаемся по второму слову и проверяем, есть ли текущая буква в словаре. Если нет, то такое слово составить невозможно. Есть есть, то просто вычитаем у значения буквы в словаре единицу. Если не можем вычесть(не хватает букв в первом слове), то ответ тоже нет.

    s1 = str(input())
    s2 = str(input())
    
    d = dict()
    
    for i in range(len(s1)):
        if s1[i] not in d:
            d[s1[i]] = 1
        else:
            d[s1[i]] += 1
    
    
    def check():
        for i in range(len(s2)):
            if s2[i] not in d:
                return "NO"
            if d[s2[i]] - 1 >= 0:
                d[s2[i]] -= 1
            else:
                return "NO"
    
        return "YES"
    
    
    print(check())
    Ответ написан
    5 комментариев
  • Объясните как работает в данном случае программа?

    @kurrbanov
    Пишу бэкенд на Питоне
    После того, как вы внутри range указали длину списка, он сохраняет изначальную его длину, переменная внутри range не изменяется.
    Простыми словами, он запомнил, что len(lst) = 5 и дальше не будет изменять этот параметр.

    В вашем случае лучше длину списка задать изначально и задать условие выхода:

    n = len(lst)
    
    for i in range(n):
        if i == n:
            break
        if len(lst[i]) == 1:
            lst.pop(i)
            n -= 1
    Ответ написан
    3 комментария
  • Как решить задачу на логику и математику в Python?

    @kurrbanov
    Пишу бэкенд на Питоне
    Пусть,
    n - кол-во км, которое нужно будет пробежать на марафоне.
    s - кол-во км. на 1 тренировке.
    p - кол-во. проц., на которое увеличивается s.

    Составим мат. модель. Получим:
    1 день: S
    2 день: (1 + p/100) * S
    3 день: (1 + p/100)^2 * S
    ...
    Конечная формула: (1 + p/100)^k * s >= n; s >= 0, поэтому на него и делим. k - количество дней.
    Получим: k = log 1+p/100(n/s) + 1. Прибавляем единицу, потому что ещё должны посчитать первый день.

    Код:

    import math
    
    n = int(input())
    s = int(input())
    p = int(input())
    
    ans = round(math.log((n / s), (1 + p / 100))) + 1
    
    print(ans)
    Ответ написан
    Комментировать
  • Как подготовить себя к олимпиадному программированию?

    @kurrbanov
    Пишу бэкенд на Питоне
    Если ты не можешь освоить теорию в виде текста, задумайся, а стоит ли тебе вообще заниматься программированием?)

    Документации текстом обычно люди пишут. Даже на CodeForces ребята пишут свои статейки, где описывают разные оптимизации, структуры данных, алгоритмы. Например, PBDS_Tree, которая часто может помогать на финалах перечневых олимпиадок первого уровня.

    Есть книга Лааксонена "Олимпиадное программирование". В ней он описал все алгоритмы, которые могут встречаться на олимпиадах по информатике. Думаю, этого достаточно.
    Если хочешь прям какой-то курс. Я надеюсь, это не воспримется, как реклама, то на foxford есть хороший курс по подготовке к олимпиадам по программированию.

    А вообще в олимпиадном(спортивном) программировании сильно решает твой опыт нарешки, потому что в задачах нужно быстро находить идеи решения.

    Как говорил Брюс Ли: "Я не боюсь человека, который знает 10000 алгоритмов. Я боюсь человека, который знает 1 алгоритм и решал с помощью него 10000 задач."
    Ответ написан
    Комментировать