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

    Vindicar
    @Vindicar
    RTFM!
    Код вернул тебе словарь с одним ключом 'username'. Читай, как пользоваться словарями и как получить значение по известному ключу.

    И да, если ты не узнаёшь базовые структуры данных питона, за ботов браться тебе рановато.
    Ответ написан
    Комментировать
  • Почему не меняются кнопки в боте?

    Vindicar
    @Vindicar
    RTFM!
    Кнопки привязаны к сообщению. Чтобы отправить новые кнопки, нужно послать новое сообщение. Ты этого не делаешь.
    Ответ написан
  • Тайминг в сообщении?

    Vindicar
    @Vindicar
    RTFM!
    Модуль time. Храни для каждого пользователя сведения о том, когда он успешно вызвал команду последний раз.
    При вызове команды проверяй, есть ли это время, и если есть, достаточно ли времени прошло.

    Код - сам.
    Ответ написан
    Комментировать
  • Ошибка в боте 'NoneType' object has no attribute 'lower'?

    Vindicar
    @Vindicar
    RTFM!
    Очевидно, event.obj.text содержит значение None по какой-то причине. Проверяй значение, прежде чем пытаться вызывать его методы.
    Ответ написан
  • Как изменить кортеж в файле?

    Vindicar
    @Vindicar
    RTFM!
    Не изобретать велосипед, а использовать формат JSON. Средства работы с ним в питоне есть из коробки, в одноименном модуле.

    Если данных много, стоит посмотреть в сторону sqlite, но тогда файл будет непригоден для ручной правки, да и тема баз данных требует больше внимания и усилий.
    Ответ написан
  • Выдает ошибку после того как нажимаю команду /buy. Как исправить ошибку?

    Vindicar
    @Vindicar
    RTFM!
    Один из сайтов, на которые ты делаешь запрос через get(), или не отвечает, или недоступен по какой-то другой причине.

    Собственно, наивно думать, что это всегда сработает. Сеть непредсказуема. Сайт может работать, может тормозить, может лежать, может тебя забанить, у тебя может не быть интернета - есть сто и одна причина, почему сайт может не работать. Так что готовься к ошибкам заранее. Заворачивай обращения к сайту в try-except, продумывай, что делать, если обращение не удалось, и т.д.
    Ответ написан
    Комментировать
  • Почему код перестает работать когда пишу с 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!
    Подскажу идею: печатай по строкам. Тогда тебе нужно будет для каждой строки определить начало и конец.
    Также для упрощения задачи найди "среднюю" вершину треугольника по высоте, и разбей его на два по этой вершине. Если такой нет (т.е. одна из сторон прямоугольника горизонтальна) - задача упрощается.
    Пример

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

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

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