Задать вопрос
Ответы пользователя по тегу Python
  • Почему не работает код?

    Vindicar
    @Vindicar
    RTFM!
    В твоём коде показано, как определить класс объекта. Смотри, как формируется prediction_text.
    А дальше просто. Храни в глобальной переменной время, когда был сохранён последний снимок объекта с желаемым классом.
    Если у тебя на текущем кадре есть объект с желаемым классом, проверь текущее время. Если прошло 30 секунд с последнего сохранения - сохрани новый снимок, и обнови время последнего сохранения на текущее.
    Ответ написан
    Комментировать
  • Как решить проблему?

    Vindicar
    @Vindicar
    RTFM!
    Входной файл, который ты грузишь вызовом users = json.load(f) записан не в кодировке utf-8. или переделай его, чтобы был в utf-8, или выясни его кодировку и укажи её при открытии файла.
    Ответ написан
  • Пишу код для счастливых билетов, но в коде что-то не то и циклы не работают после 000000, в чём проблема?

    Vindicar
    @Vindicar
    RTFM!
    Во-первых, у тебя уехали циклы, начиная с о второй цифры. Они не внутри общего цикла.
    Далее, ты можешь заменить 6 циклов на один, просто по числам от 0 до 999999.
    for number in range(0, 1_000_000):
        str_number = f'{number:0>6}' # превращаем число в строку, добивая нулями слева до 6 знаков
        digits = list(map(int, str_number))  # каждый символ строки превращаем в отдельное число, т.е. цифру
        d1, d2, d3, d4, d5, d6 = digits  # распаковываем список цифр в отдельные переменные


    Ещё ты можешь перебирать первые 5 цифр, а шестую цифру вычислять - сумма первых трёх минус четвёртая и минус пятая . Если результат в диапазоне 0-9, то это и будет шестая цифра.

    Если же ты предпочтёшь перебирать 5 цифр отдельными циклами, то стоит делать иначе.
    Первые 3 цифры перебираешь полным циклом, 4я цифра не должна превышать сумму первых 3х, 5я цифра не должна превышать сумму первых 3х - 4ю цифру. 6ю цифру вычислишь.
    for d1 in range(10):
        for d2 in range(10):
            for d3 in range(10):
                for d4 in range(min(9, d1+d2+d3) + 1):
                    for d5 in range(min(9, d1 + d2 + d3 - d4) + 1):
                        d6 = d1 + d2 + d3 - d4 - d5
                        if 0 <= d6 <= 9:
                            print(f'{d1}{d2}{d3}{d4}{d5}{d6}')


    Аналогично, можно заметить, что не всегда имеет смысл перебирать 4-5 цифры с нуля. Пример: если первые три цифры 299, то четвёртая не может быть 0 или 1 - в этом случае оставшиеся две цифры должны будут дать в сумме 20 или 19, что невозможно. С учётом код изменится так:
    for d1 in range(10):
        for d2 in range(10):
            for d3 in range(10):
                min_d4 = max(0, d1 + d2 + d3 - 18)
                max_d4 = min(9, d1 + d2 + d3)
                for d4 in range(min_d4, max_d4 + 1):
                    min_d5 = max(0, d1 + d2 + d3 - d4 - 9)
                    max_d5 = min(9, d1 + d2 + d3 - d4)
                    for d5 in range(min_d5, max_d5 + 1):
                        d6 = d1 + d2 + d3 - d4 - d5
                        if 0 <= d6 <= 9:
                            print(f'{d1}{d2}{d3}{d4}{d5}{d6}')
    Ответ написан
    Комментировать
  • Почему код не работает так как должен?

    Vindicar
    @Vindicar
    RTFM!
    Ну для начала, разность двух datetime даёт объект timedelta.
    И в доках написано так:
    Only days, seconds and microseconds are stored internally. Arguments are converted to those units:
    A millisecond is converted to 1000 microseconds.
    A minute is converted to 60 seconds.
    An hour is converted to 3600 seconds.
    A week is converted to 7 days.

    Т.е. timedelta(days=1).seconds даст 0, так как это 1 день и 0 секунд.

    Выхода два.
    1. Построй объект timedelta, описывающий таймаут операции, и сравнивай с ним напрямую.
    timeout = datettime.timedelta(days=1)
    if (datetime.datetime.now() - last_command_use_time) > timeout:
        ...

    2. Используй метод total_seconds()
    timeout = datettime.timedelta(days=1)
    if (datetime.datetime.now() - last_command_use_time).total_seconds() > 24*60*60:
        ...
    Ответ написан
    Комментировать
  • Почему с отрицательным кол-во хп персонаж жив?

    Vindicar
    @Vindicar
    RTFM!
    1. Включи логику. Ты сначала проверяешь, умер ли персонаж, а потом наносишь урон. Отсюда и наблюдаемое поведение.
    2. Никогда не используй f-строки для SQL запросов, освой parametrized queries.
    Ответ написан
    Комментировать
  • Почему не работает meber_join disnake?

    Vindicar
    @Vindicar
    RTFM!
    Разберись уже, как работает utils.get().
    Она принимает коллекцию объектов, и набор атрибутов в виде kwargs.
    Возвращает первый объект в этой коллекции, у которого атрибуты совпадают с заданными.
    Т.е. тебе надо туда передать список ролей сервера и атрибут id.
    Ну или использовать другой метод, например, member.guild.get_role().

    Читай документацию, короче.
    Ответ написан
    Комментировать
  • Как сделать список в операторе?

    Vindicar
    @Vindicar
    RTFM!
    Либо как это сделал soremix , либо вот так, однострочником:
    if any(word in text for word in list_hello):
        print('Oi!')

    Но и тут много подводных камней. "превед" такой подход не опознает, а вот на "нехай" сработает.
    Ответ написан
    Комментировать
  • Почему тип dict не изолируется внутри класса?

    Vindicar
    @Vindicar
    RTFM!
    class Interface:
        a = 1
        b = dict()
        c = []

    Ты описал класс с тремя атрибутами класса. Не экземпляра, а именно класса.
    Три атрибута экземпляра описываются как
    class Interface:
        def __init__(self):
            self.a = 1
            self.b = dict()
            self.c = []

    А если тебе нужен эквивалент интерфейсов, почитай про typing.Protocol.
    Ответ написан
    Комментировать
  • Sqlite - как добавить текст в ячейку бд, если в нем могут содержаться и одинарные, и двойные кавычки?

    Vindicar
    @Vindicar
    RTFM!
    А всего-то нужно прочитать документацию. Там этот случай описан, и показано, как делать правильно.
    con = sqlite3.connect(":memory:")
    cur = con.execute("CREATE TABLE lang(name, first_appeared)")
    
    # This is the named style used with executemany():
    data = (
        {"name": "C", "year": 1972},
        {"name": "Fortran", "year": 1957},
        {"name": "Python", "year": 1991},
        {"name": "Go", "year": 2009},
    )
    cur.executemany("INSERT INTO lang VALUES(:name, :year)", data)
    
    # This is the qmark style used in a SELECT query:
    params = (1972,)
    cur.execute("SELECT * FROM lang WHERE first_appeared = ?", params)
    print(cur.fetchall())
    Ответ написан
    5 комментариев
  • Некорректная работа sqlite. Работа с параметрами. Что мне делать?

    Vindicar
    @Vindicar
    RTFM!
    Во-первых, проверить структуру таблицы eBase, какие столбцы там есть.
    Во-вторых, никогда не использовать форматирование строк для составление запросов.
    Для этой цели есть parametrized queries.
    Ответ написан
    5 комментариев
  • Как обработать ошибку UnicodeDecodeError и при этом продолжить чтение файла?

    Vindicar
    @Vindicar
    RTFM!
    Альтернативное решение - использовать не обёртку for ... in file, а использовать цикл while и вызывать file.readline() вручную.
    Ответ написан
    Комментировать
  • Как посмотреть тело функции в python?

    Vindicar
    @Vindicar
    RTFM!
    Для встроенных функций не получится. Они не на Питоне реализованы. Читай исходники, как посоветовал Влад Григорьев .
    Ответ написан
    Комментировать
  • Почему выходит None?

    Vindicar
    @Vindicar
    RTFM!
    else print(item + "-NO")
         ^^^^^
    Ответ написан
    Комментировать
  • Как работает переприсваивании значений переменных Phyton?

    Vindicar
    @Vindicar
    RTFM!
    Мы ведь уже присвоили в предыдущем блоке if, что l1 = a.

    А может, и не присвоили. Не факт, что предыдущий if выполнился. Тогда останется l1 от предыдущей итерации цикла. А на первой итерации - будет начальное значение l1 = 0.
    Ответ написан
    Комментировать
  • Как записать Словарь в CSV по СТОЛБЦАМ в Python?

    Vindicar
    @Vindicar
    RTFM!
    Открой для себя функции zip() и itertools.zip_longest().
    Ответ написан
  • Как проверить запущен ли сервер или нет по его IP адресу на Python?

    Vindicar
    @Vindicar
    RTFM!
    Пинг проверяет доступность целевого узла из данного узла.
    Если по какой-то причине нет связности между двумя узлами, или если машина настроена не отвечать на пинг, или какой-то из промежуточных узлов режет ICMP трафик, ты ответа не получишь, даже если сервер будет активен.

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

    Я бы пытался подключиться к серверу по требуемому тебе протоколу, и судил по этому.
    А если сервер тебе подконтролен - оцени возможность использования существующих средств мониторинга, прежде чем писать свои.
    Ответ написан
    Комментировать
  • Как прочитать первый n строк из файла, удалив их из него?

    Vindicar
    @Vindicar
    RTFM!
    Нет. Ты можешь открыть файл на чтение и запись, и затем скакать по файлу с помощью seek(), но это ничуть не быстрее. Меньше дискового пространства требует, вот и вся выгода.
    Текстовые файлы вообще плохо поддаются частичному обновлению.
    Если тебе такое требуется часто, впору смотреть в сторону простых БД, вроде sqlite. Ей не требуется отдельное серверное ПО, и база данных будет состоять из одного файла. Вполне себе нормальный апгрейд.
    Ответ написан
  • Как поменять местами максимальный и минимальный элемент списка?

    Vindicar
    @Vindicar
    RTFM!
    Включи логику.
    Чтобы прочитать/записать элемент списка, нужно знать его индекс.
    Ты знаешь значение минимума/максимума, но не индекс.
    Вывод: нужно в цикле поиска обновления не только само значение minimum и maximum, но и в отдельной паре переменных хранить индекс i, где был обнаружен последний минимум/максимум.

    Любопытно, что ты уже используешь enumerate() для перечисления списка, но до сих пор не использовал индекс очередного элемента i, который он тебе сообщает.
    Ответ написан
  • Можно ли выполнять код при досрочном завершении программы?

    Vindicar
    @Vindicar
    RTFM!
    Зависит от того, что ты понимаешь под досрочным завершением, и что ты хочешь сделать в рамках реакции на это завершение.
    Например, os._exit() прибьёт процесс так, что никакое завершение не отработает. Аналогично, есть другеи ситуации, когда процесс прибивается "снаружи". В таких случаях только мониторинг со стороны родительского процесса, только хардкор.
    В простейшем случае можно завернуть тело программы в try-except, try-finally или кастомный блок with (скажем, через contextlib.contextmanager).
    Также можно посмотреть в сторону модуля atexit, но там свобода действий будет более ограничена.
    Ответ написан
    Комментировать
  • Как обновить поля таблицы Peewee?

    Vindicar
    @Vindicar
    RTFM!
    create_tables(), ЕМНИП, делает запрос вида CREATE TABLE IF NOT EXISTS, который проверяет только наличие таблицы, но не её структуру. Или дропни таблицу прямым sql запросом DROP TABLE (с потерей данных!) и пересоздай, или освой schema migration.
    Ответ написан