Ответы пользователя по тегу Python
  • У меня в программе ошибка не считает последную функцию не тот ответ как исправить?

    Vindicar
    @Vindicar
    RTFM!
    Впридачу ко всему остальному выше:
    return clas 
    return name

    Отработает только первый return.
    Ответ написан
    Комментировать
  • JSON io.UnsupportedOperation: not readable почему выводиться данная ошибка JSON?

    Vindicar
    @Vindicar
    RTFM!
    with open('values.json') as json_file:
    Для чего открываешь файл? Чтение? Запись? Надо указывать.
    Ответ написан
  • Как можно оптимизировать код для склейки видео по запросу пользователя?

    Vindicar
    @Vindicar
    RTFM!
    a = VideoFileClip("./Video/a.mp4")
    b = VideoFileClip("./Video/b.mp4")

    1. Если ты ловишь себя на создании переменных такого вида, тебе нужна коллекция. Открой для себя словари (dict).

    2. Что мешает подставить введённую строку в имя файла?
    Ответ написан
    1 комментарий
  • Возможно ли добавить функцию в бота aiogram, которая будет удалять/изменять текст сообщения?

    Vindicar
    @Vindicar
    RTFM!
    Нужно хранить в БД ID всех сообщений бота консультантам, которые описывают данную заявку. При обработке заявки пройтись по списку ID для данной заявки и удалить сообщение (ну или отредактировать).
    Простейшая таблица вида "ID сообщения - ID заявки" тут справится.
    Ответ написан
    2 комментария
  • Aiogram как отправлять заранее заготовленное сообщение каждый день?

    Vindicar
    @Vindicar
    RTFM!
    1. Записать в переменной ID получателя.
    2. Разобраться, как отправить сообщение по заранее известному ID.
    3. Разобраться, как пользоваться aioschedule.
    Ответ написан
    Комментировать
  • Как сделать так, что бы обновлялось всё время?

    Vindicar
    @Vindicar
    RTFM!
    Я написал такой код:

    Не верю. (с)

    Если бы ты сам его написал, ты бы знал, что у тебя там сначала вечный цикл while True, который прерывается только если нажата клавиша (cv2.waitKey()) с кодом 27, т.е. Esc. Но этот цикл только читает кадр и показывает его в окне. А всё распознавание идёт уже после этого цикла. И там же вывод одного кадра и ожидание любой клавиши.

    Если нужно, чтобы операция выполнялась для каждого кадра - она должна быть внутри цикла по кадрам. Логично?
    Ответ написан
  • Как выполнить нужный из директорий скрипт в зависомости от переданного аргумента?

    Vindicar
    @Vindicar
    RTFM!
    А) Запускай скрипт как суб-процесс через os.system() / subprocess / вариации на тему. Годится, если скрипт-сервис должен быть изолирован от основного скрипта.
    Б) импортируй модуль через importlib. Каждый модуль должен иметь точку входа, скажем, класс или функцию с заданным именем, которую основная программа активирует. Более тесное взаимодействие, со всеми плюсами и минусами.
    Ответ написан
    Комментировать
  • Как настроить универсальный хендлер в аиограм?

    Vindicar
    @Vindicar
    RTFM!
    Вместо text в callback_query_handler() укажи функцию, которая принимает CallbackQuery и возвращает True, если надо обработать данный запрос, и False, если нужно поискать другой обработчик. Для ускорения можешь все коды запросов в БД пометить отдельным префиксом (например, пусть они начинаются с "db_"), чтобы сразу отсечь посторонние коды.
    Просто погугли callback_query_handler, увидишь что-то типа lambda callback_query: True - это означает "принимать любые коды запроса". Но ведь можно True возвращать не всегда.
    Ответ написан
    Комментировать
  • Хочу прописать арифметические действия телеграм боту. Как это сделать?

    Vindicar
    @Vindicar
    RTFM!
    Читай на тему finite state machine. Не знаю конкретно насчёт telebot, а другие библиотеки содержат эту фичу.
    Но в целом идея несложная - ты должен для каждого пользователя помнить, на каком шаге он находится (ожидание первого числа, ожидание оператора, ожидание второго числа) и что он вводил раньше. Получив сообщение, смотришь по ID пользователя его шаг, и обрабатываешь текст сообщения соответственно. Можно это и вручную реализовать.

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

    Vindicar
    @Vindicar
    RTFM!
    Ну немногие фреймворки такое позволяют. Можно подёргать WinAPI, например, SetWindowRgn() (позволяет задать видимую и "осязаемую" область окна). Тогда можно сделать окно на твоём предпочитаемом фреймворке, узнать дескриптор окна, и вызвать эту функцию через ctypes для задания непрозрачных областей.

    Насчёт Qt не скажу, может, оно и умеет такое "из коробки".
    Ответ написан
    Комментировать
  • Как можно изменить код, чтобы он работал быстрее?

    Vindicar
    @Vindicar
    RTFM!
    result = numpy.zeros(mask.shape + (3,), dtype=numpy.uint8)
    result[mask > 0] = (255, 255, 255)

    циклы в питоне - штука медленная. Если есть возможность, лучше использовать индексные операции numpy. Они заметно быстрее, чем тот же цикл в питоне.
    Ответ написан
    Комментировать
  • Aiogram как боту самому начать опрос в заданное время?

    Vindicar
    @Vindicar
    RTFM!
    1. Научиться отправлять сообщение в чат с заранее известным ID вместо использования message.answer().
    2. Хранить ID (или список ID), которым надо разослать сообщение.
    3. Научиться пользоваться пакетом aioschedule. В частности, как планировать вызов корутины и что нужно сделать для обеспечения работы пакета.
    4. Понять, как пользоваться asyncio.create_task(), чтобы запускать рабочий цикл aioschedule параллельно с работой бота. В частности, как выполнить код непосредственно при старте бота, а не как реакцию на сообщение.
    5. Свести эти знания вместе.

    При старте бота запускаем рабочий цикл aioschedule и планируем выполнение корутины опроса. Корутина опроса проходит по списку ID и каждому отправляет сообщение, одновременно задавая нужное состояние на машине состояний FSM. Дальше работа идёт как обычно - приняли сообщение пользователя, обработали состоянием, перешли к следующему состоянию.
    Ответ написан
    Комментировать
  • В чем разница между параметрами и атрибутами классов?

    Vindicar
    @Vindicar
    RTFM!
    Параметры метода относятся только к самому методу. Остальной класс про них знает, но только в плане "что нужно передать этому методу при вызове". Как метод использует тот или иной параметр - это его дело.

    Атрибуты класса привязаны к экземпляру класса. По сути, у большинства объектов есть скрытый словарь __dict__, который хранит атрибуты этого объекта. Создание атрибута означает внесение записи в __dict__.

    Как атрибуты создаются - определяется в первую очередь конструктором класса, т.е. методом __init__(), хотя и не только им. Обычно можно создать атрибут в любой момент времени, хотя это не рекомендуется делать, так как это запутывает программу.

    При этом у __init__() есть полная свобода действий в плане того, откуда брать значения для атрибутов класса и какие атрибуты создавать. Пример:
    class Point:
        def __init__(self):
            self.x = 0
            self.y = 0
    
    point = Point()
    # у point есть два собственных атрибута, x и y
    print(point.__dict__)  # {'x': 0, 'y': 0}

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

    Пример параметров, не относящихся к атрибутам:
    class Point:
        def __init__(self, is_3d):
            self.x = 0
            self.y = 0
            if is_3d:  # этот параметр не используется как значение атрибута
                self.z = 0  # а этот атрибут может присутствовать или отсутствовать
    
    point_2d = Point(False)
    print(point_2d.__dict__)  # {'x': 0, 'y': 0}
    point_3d = Point(True)
    print(point_3d.__dict__)  # {'x': 0, 'y': 0, 'z': 0}

    Пример создания атрибута "на ходу":
    class Point:
        def __init__(self):
            self.x = 0
            self.y = 0
    
    point = Point()
    print(point.__dict__)  # {'x': 0, 'y': 0}
    point.name = 'Start'  #  создаём атрибут "на ходу"
    print(point.__dict__)  # {'x': 0, 'y': 0, 'name': 'Start'}


    Опять же, это не самая хорошая практика - куда лучше, когда набор атрибутов у объекта всегда один и тот же, и не меняется во время выполнения программы. Так меньше путаницы.
    Но это пример того, что атрибуты - это, по сути, ключи в связанном с объектом словаре, а потому могут создаваться и изменяться, если это нам требуется.
    Ответ написан
    2 комментария
  • Почему я получаю данную ошибку?

    Vindicar
    @Vindicar
    RTFM!
    Да, таблицу и столбцы нельзя делать через подстановку. В чем именно ошибка непонятна?
    Ответ написан
    Комментировать
  • Как убрать ограничения чтения названия столбца в PostgreSQL?

    Vindicar
    @Vindicar
    RTFM!
    https://www.postgresql.org/docs/7.0/syntax525.htm
    The system uses no more than NAMEDATALEN-1 characters of a name; longer names can be written in queries, but they will be truncated. By default, NAMEDATALEN is 32 so the maximum name length is 31 (but at the time the system is built, NAMEDATALEN can be changed in src/include/postgres_ext.h).


    Только компилять свою версию постгре с увеличенной константой NAMEDATALEN.
    Ну или исправить кхм, странную архитектуру твоей программы, которой нужны длинные рускоязычные имена столбцов.
    Ответ написан
    6 комментариев
  • Как исправить эту ошибку ValueError: invalid literal for int() with base 10: "b'8"?

    Vindicar
    @Vindicar
    RTFM!
    data=str(ArduinoSerial.readline())
    Включи голову. Так ты данные из строки байт (тип bytes) в строку символов (тип str) не преобразуешь.
    Нужно использовать ту или иную кодировку.
    Если у тебя нет кириллицы и т.п. символов (например, латиница и/или цифры), можно использовать
    data = ArduinoSerial.readline().decode('ascii')
    Ну и обработку исключений добавь, а то мало ли что тебе придёт с последовательного порта.
    Ответ написан
  • Насколько критично использование pydantic в асинхронных приложениях?

    Vindicar
    @Vindicar
    RTFM!
    Не стоит спользовать длительные синхронные вызовы в асинхронном коде.
    Во-первых, валидация - это CPU-bound задача, а не IO-bound. Её можно вынести в поток, но и только. Просто асинхронно её не выполнишь.
    Во-вторых, если у тебя не ChatGPT данные валидирует, скорее всего время выполнения валидации будет пренебрежимо малым.
    Ответ написан
    Комментировать
  • Как обработать команду в телеграмм боте при работающем расписании на aioschedule?

    Vindicar
    @Vindicar
    RTFM!
    await asyncio.create_task(scheduler())
    Ты ждешь, пока scheduler() не закончит работу. Зачем? Вызов create_task() сам по себе планирует выполнение переданной корутины, её не имеет смысла awaitить - разве что только в плане "дождаться конца задачи".
    Оставь просто вызов create_task(), без await, ну или сохрани возвращаемое create_task() значение в переменную (если нужно будет потом прервать выполнение scheduler()).
    Ответ написан
    1 комментарий
  • Как найти наибольшее по сумме чисел?

    Vindicar
    @Vindicar
    RTFM!
    number //= 1
    Может, всё-таки 10?

    Ну и почему ты делаешь проверку на максимум после каждой цифры (т.е. внутри while),а не после того как ты посчитал сумму всех цифр числа?
    Ответ написан
    1 комментарий
  • Вопрос по реализации скачивания нескольких изображений. Как выполнить?

    Vindicar
    @Vindicar
    RTFM!
    Добавлял уникальный ID к имени товара, к имени фото

    Ну так добавляй ID к имени фото, но не к имени товара, делов-то.
    Ответ написан
    2 комментария