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

    Vindicar
    @Vindicar
    RTFM!
    По поводу твоего второго вопроса: listener - это почти наверняка поток выполнения. И я подозреваю, что этот поток отмечен как daemon - т.е. фоновый поток. Он работает независимо от главного потока, который выполняет тело программы. Главный поток запускает listener, и переходит на input(). Когда input() вернёт управление, главный поток дойдёт до конца программы и завершится.
    Когда в программе на питоне остаются только фоновые потоки, она завершается.
    Так что если тебе нужно, чтобы программа просто ждала, while True: time.sleep(1.0) в помощь. Этот цикл прервать будет сложно.
    Ответ написан
    Комментировать
  • To many values to unpack как фиксить?

    Vindicar
    @Vindicar
    RTFM!
    Если ты используешь распаковку коллекции (т.е. оператор вида a, b, c = some_value), тебе нужно быть уверенным, что some_value содержит в точности столько значений, сколько переменных ты распаковываешь.
    Если это не так, есть три варианта:
    1. Если ты знаешь, сколько значений в возвращаемой коллекции, ты можешь просто добавить нужное количество переменных. a, b, c, _ = some_value. Символом _ обычно обозначаются неиспользуемые переменные/параметры.
    2. Если ты не знаешь, сколько значений в возвращаемой коллекции, или это число меняется, можно не выпендриваться, а работать с индексами. Но тебе нужно быть уверенным, что у тебя всегда есть как минимум нужное число значений.
    a = some_value[0]
    b = some_value[1]
    c = some_value[2]
    # и так далее.

    3. Есть ещё вариант распаковки, который работает, если ты значешь, что значений больше, чем нужно:
    a, b, c, *_ = somevalue

    Я бы посоветовал второй вариант
    Ответ написан
    Комментировать
  • Как извлечь эмодзи из картинки?

    Vindicar
    @Vindicar
    RTFM!
    Окей, гугл, opencv template matching.
    Когда научишься находить заранее известный эмодзи в изображении, делаешь базу эмодзи в искомом приложении и пробуешь находить их по очереди.
    Процесс можно будет ускорить, создав дерево - например, ищешь желтые кружки, если такой нашёлся с определённой степенью уверенности, только тогда ищешь желтые лица. Но это уже подробности.
    Ответ написан
    Комментировать
  • Ошибка при попытке создать асинхронную функцию RuntimeWarning: coroutine 'gather_data' was never awaited?

    Vindicar
    @Vindicar
    RTFM!
    Ну если почитать внимательнее, тебе говорят в чём дело:
    File "D:\all\Programming\Парсинг\main.py", line 46, in gather_data
    pagination = int(soup.find('div', class_='pagination-wrapper').find('ul', class_='pagination-list css-1vdlgt7').find_all('li', class_='pagination-list-item')[-1].text)
    AttributeError: 'NoneType' object has no attribute 'find'

    Ты лихим кавалерийским наскоком пытаешься пройти по тегам, а какого-то из них просто нет в странице.
    Заверни код хотя бы в try-catch, и имей ввиду - сетевые операции по природе своей ненадёжны. Если сайт не твой, он может не ответить, ответить через полчаса, или прислать гоатсе вместо ответа. Так что нужно быть готовым к худшему.
    Ответ написан
  • Как использовать bot.exception_handler(telebot)?

    Vindicar
    @Vindicar
    RTFM!
    class ExHandler:
        def handle(self, error):
            print('Error: ', error)
    Ответ написан
    Комментировать
  • Не могу запустить пишет Error no such table: users?

    Vindicar
    @Vindicar
    RTFM!
    sqlite3.connect('teor.db')
    Ты уверен, что питоновский скрипт и клиент sqlite открывают один и тот же файл с базой данных?
    Ты указал относительный путь, т.е. путь относительно текущего рабочего каталога. Он может совпадать или не совпадать с каталогом, где лежит скрипт.
    На всякий случай, попробуй так:
    import pathlib, sys
    script_dir = pathlib.Path(sys.argv[0]).parent.resolve()  # путь к каталогу скрипта
    db_file = script_dir / 'teor.db'  # путь к файлу БД
    print(db_file)  # для проверки, какой файл открывается
    conn = sqlite3.connect(db_file)
    ...  # далее по тексту


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

    Vindicar
    @Vindicar
    RTFM!
    str.maketrans() чтобы сделать таблицу преобразований
    str.translate() чтобы её использовать.
    Правда, этот подход работает только для преобразований "1 символ -> 1 символ".
    Если тебе нужно что-то другое, то, как написали выше, словарь в помощь.
    Ответ написан
    2 комментария
  • Можно ли в месте файл указать ссылку?

    Vindicar
    @Vindicar
    RTFM!
    Можно было чуть-чуть погуглить примеры, и почитать код, там всё написано простым английским:
    async def recognize_song(
            self, data: Union[str, pathlib.Path, bytes, bytearray, AudioSegment]
        ) -> Dict[str, Any]:
            """
            Creating a song signature based on a file and searching for this signature in the shazam
            database.
                :param data: Path to song file or bytes
                :return: Dictionary with information about the found song
            """

    Т.е. data принимает или путь к файлу, или байты с содержимым файла.
    Поэтому ответ на твой вопрос: нужно самому скачать аудиофайл по ссылке, и скачанное содержимое отдать в recognize_song().
    Если у тебя ссылка на youtube, то либо используй пакет youtubedl, либо посмотри в примерах есть что-то на тему.
    Ответ написан
    Комментировать
  • Почему бот не отправяет мне значение после функции?

    Vindicar
    @Vindicar
    RTFM!
    if i1 == proverka_slova:
    Ты сравниваешь функцию со строкой. Что ты ожидал получить-то?
    Если тебе нужен текст сообщения, обращайся к свойствам объекта message (подозреваю, нужное свойство так и называется - text).
    Ответ написан
    4 комментария
  • Как выполнить код после завершения потоков?

    Vindicar
    @Vindicar
    RTFM!
    t.join() дождётся завершения для одного потока t. Если нужно дождаться завершения всех трёх потоков, то можно сделать join() в цикле.
    Ответ написан
    Комментировать
  • Не знаю как сделать так чтобы скрипт обрабатывал сообщения которые приходят ко мне в ЛС, а не в группах?

    Vindicar
    @Vindicar
    RTFM!
    Если хочешь, чтобы бот видел сообщения, отправленные на твою учетку, нужно запускать бота не как бота, а как клиента от твоей учётки. Потенциально чревато баном, и я не знаю, какие библиотеки позволяют делать такой userbot.
    Ответ написан
  • Как сделать так, чтобы бот отправлял текст в таком формате который я ему отправляю?

    Vindicar
    @Vindicar
    RTFM!
    caption отдаёт только plaintext (без форматирования). Вроде как есть свойство-список caption_entities, содержащее сведения о форматировании.
    Либо попробуй указать это свойство при отправке сообщения, параметром entities = message.caption_entities, либо разбирай элементы этого списка, ищи форматирование, и вставляй его вручную (там указывается позиция в строке, где форматирование начинается/заканчивается).
    Ответ написан
    3 комментария
  • Как остановить бесконечный цикл?

    Vindicar
    @Vindicar
    RTFM!
    Последний input() должен быть вне веток if-elif-else, но внутри тела цикла.
    Ответ написан
    Комментировать
  • Как напечать треугольник в консоли?

    Vindicar
    @Vindicar
    RTFM!
    Подскажу идею: печатай по строкам. Тогда тебе нужно будет для каждой строки определить начало и конец.
    Также для упрощения задачи найди "среднюю" вершину треугольника по высоте, и разбей его на два по этой вершине. Если такой нет (т.е. одна из сторон прямоугольника горизонтальна) - задача упрощается.
    Пример

    # было
         *
        ***
       *****
      *******
     ****
    *

    # верхний полутреугольник
         *
        ***
       *****
      *******
    # нижний полутреугольник
     ****
    *

    Таким образом, ты можешь по координатам вершин вычислить шаг - через сколько строк надо уменьшить/увеличить координату начального и конечного столбца. А дальше простой цикл.
    ЕМНИП, так делают видеокарты, только с пикселями.
    Шаг имеет смысл оставить дробным, чтобы избежать проблем с накапливающейся ошибкой округления.
    Ответ написан
    Комментировать
  • Как бот должен понимать что нужно нажимать кнопку во время qte?

    Vindicar
    @Vindicar
    RTFM!
    Template matching попробуй.
    Ответ написан
    Комментировать
  • Почему IDLE и командная строка не видят модуль keyboard?

    Vindicar
    @Vindicar
    RTFM!
    keyboard - это сторонний модуль. Ты его установил через pip?
    Ответ написан
  • Создание, сохранение, проверка ключей доступа?

    Vindicar
    @Vindicar
    RTFM!
    Ну если совсем извратиться, то:
    * зашифровать программу желаемым ключом
    * написать лоадер, который просит у пользователя пароль, загружает файлы основной программы в память, расшифровывает их введённым ключом и пытается запустить точку входа в основную программу.

    Тогда подглядеть ключ в лоадере не получится, как и оторвать сам лоадер. Разве что брутфорсить ключ, пытаясь найти такой ключ, который даст на выходе корректные питоновские скрипты.

    Примерный путь будет:
    1. Загрузить бинарные данные из файла как bytes
    2. Расшифровать в памяти, получив исходники
    3. Использовать exec()

    Альтернативно, вместо исходников можно шифровать байткод, но тогда придётся соображать, как превратить bytes в code object, который можно выполнить через exec(). Теоретически, может помочь marshal.

    Схема не 100% надёжная, разумеется.

    А вообще, какая у тебя задача? Может, pyarmor подойдёт?
    Ответ написан
  • Можно ли узнать какая корутина вызвала ошибку в asyncio.gather?

    Vindicar
    @Vindicar
    RTFM!
    Вообще-то gather() возвращает исключения и результаты в том же порядке, в котором переданы корутины. Всегда.
    Но ты сам себе выстрелил в ногу вот этим: *{f1(), f2()}
    Ты указал литерал множества, а это не упорядоченная коллекция. Так что в каком порядке были переданы корутины - хз.
    Положи их в кортеж или в список перед отдачей в gather(), и проблема уйдёт - элемент выходного списка с индексом i будет соответствовать корутине с индексом i в исходном кортеже/списке.
    Ответ написан
    Комментировать
  • Почему метод find_all из bs4 возвращает пустой список?

    Vindicar
    @Vindicar
    RTFM!
    А ты уверен, что то, что ты видишь в браузере - это то же, что получает на вход BS?
    Инста может либо детектить тебя как бота, и отдавать другую страницу, или просто использовать JS для динамической подгрузки контента, отдавая статически только "болванку". BS не выполняет JS код, так что болванка - это всё, что он увидит в таком случае.
    Скинь page.text в файл и посмотри, что там.
    Ответ написан
    Комментировать
  • Установление значений для маркеров в Matplotlib?

    Vindicar
    @Vindicar
    RTFM!
    Я бы использовал pyplot.text() или pyplot.annotate() (ну или соответствующие методы ax).
    Они позволяют указывать координаты текста в единицах данных (т.е. в координатных осях на твоём графике). А маркеры по умолчанию ставятся на каждую точку данных, так что привязать текст к тем же точкам что и маркеры будет тривиально - просто цикл по данным и вызов метода на каждую позицию.
    for xv, yv in zip(x, y):
        caption = f'{yv:.0f}'  # тут генеришь надпись так, как тебе надо
        ax.text(xv, yv, caption, ha='center', va='top')  # по умолчанию координаты задаются по данным
    Ответ написан
    Комментировать