• Что делать если выдаёт ошибка с модулем Discord?

    Vindicar
    @Vindicar
    RTFM!
    Ну так у тебя библиотека для работы с discord не установлена. Почитай в документации, как её установить.
    Мне лениво
    В командной строке pip install discord.py. Это если ты используешь именно discord.py, а не один из его клонов.
    Ответ написан
    Комментировать
  • Как включить разделитель в данное выражение на Python?

    Vindicar
    @Vindicar
    RTFM!
    print(f"{a:016_b}")
    Ответ написан
    Комментировать
  • Каким образом можно обучить ИИ распознавать лицо python?

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

    Vindicar
    @Vindicar
    RTFM!
    Я подозреваю, ты пытаешься на каждую строку данных создавать объект PyQT. Такого издевательства оно не переживёт.
    Вместо этого при прокрутке определи первую и последнюю видимую позицию в данных, очисти текущее содержимое своего окна с данными, и выведи только видимую часть данных.
    Ответ написан
    Комментировать
  • Почему выходит ошибка Bad Request: message text is empty, хотя сообщение не пустое!?

    Vindicar
    @Vindicar
    RTFM!
    File "C:\Users\user\Desktop\.py Black list aio\handlers\add_guest.py", line 45, in get_iin
        await message.answer('')  # <--- вот тут
    Ответ написан
    Комментировать
  • Как ввести байты через input?

    Vindicar
    @Vindicar
    RTFM!
    input([prompt])
    If the prompt argument is present, it is written to standard output without a trailing newline. The function then reads a line from input, converts it to a string (stripping a trailing newline), and returns that. When EOF is read, EOFError is raised.

    Напрямую - никак, input() всегда преобразует результат в строку. Если надо читать бинарный поток со стандартного входа, используй sys.stdin.buffer. Это файловый объект, но он не текстовый, а бинарный.
    Ответ написан
    Комментировать
  • Как сделать из кода пайтон exe файл?

    Vindicar
    @Vindicar
    RTFM!
    Тебе суперкритично --onefile? Режим одной папки не подойдёт?
    Ответ написан
  • Как получить наименьший целочисленный тип, способный вместить число n?

    Vindicar
    @Vindicar
    RTFM!
    Я бы тоже посоветовал выделить массив байт, и кастовать указатель к нужному типу, скажем, через union.
    Если alignment массива будет подходящий (например, сразу по 8 байтам), то никакого замедления быть не должно в итоге.
    Ответ написан
  • Как ввести длинный поток байтов?

    Vindicar
    @Vindicar
    RTFM!
    sys.stdin.read() в цикле, пока не прочитаешь пустую строку.
    Ну или запиши в файл и читай оттуда, таким же способом.
    Ответ написан
    1 комментарий
  • Как сделать цикл разархированния файлов zip?

    Vindicar
    @Vindicar
    RTFM!
    Шаг 1: сделай на базе своего кода подпрограмму, которая делает то, что нужно, принимая в качестве параметра путь к zip-файлу и путь к целевой папке session.
    Шаг 2: получи список путей к zip-файлам, подлежащих обработке
    Шаг 3: для каждого файла вызови свою подпрограмму.
    Ответ написан
  • Google Forms - как получить только уникальные заполнения?

    Vindicar
    @Vindicar
    RTFM!
    Через гуглоформы никак.
    Делай привязку к телефону с кодом подтверждения через СМС.
    Это всё равно можно обойти, но обход будет сложнее и/или дороже, не все будут заморачиваться... если, конечно, дело того не стоит.
    Ответ написан
    Комментировать
  • Как сделать правильный порядок отображения?

    Vindicar
    @Vindicar
    RTFM!
    Что-то такое?
    from collections import Counter
    from collections.abc import Hashable
    
    def combine_suggestions(user: list[Hashable], glob: list[Hashable]) -> list[Hashable]:
        uc = Counter(user)
        gc = Counter(glob)
        for key in uc:
            gc.pop(key, None)
        u = uc.most_common()
        g = gc.most_common()
        return [item[0] for item in (u + g)]

    https://docs.python.org/3.9/library/collections.ht...
    Ответ написан
    Комментировать
  • Возможно ли как-то использовать обычную функцию заместо макро-функции?

    Vindicar
    @Vindicar
    RTFM!
    bit_set() принимает аргумент по значению, т.е. принимает его копию. От того, что эта копия изменена внутри функции, снаружи ничего не поменяется. А раз других побочных эффектов у функции нет, компилятор удаляет её вызов.
    Макрос же после всех подстановок сделает просто присваивание указанной переменной. Тут побочный эффект есть.
    Ответ написан
    4 комментария
  • Почему callback_query_handler не видит call.data?

    Vindicar
    @Vindicar
    RTFM!
    Во всех примерах это работает именно так...

    Не верю.

    bot.register_next_step_handler() принимает обработчик следующего сообщения, а не кнопки. Собственно, твоя функция и получает объект сообщения.
    Ответ написан
    2 комментария
  • Не правильная проверка ячейки таблицы через цикл, почему не записывается переменная?

    Vindicar
    @Vindicar
    RTFM!
    Ты уверен? Как насчёт явно задать порядок выборки нужных тебе столбцов в select?
    Что-то в духе SELECT id, name, chat_id FROM users. Названия столбцов укажи свои, и только используемые в данном коде.

    Далее, с БД так не работают. Ты выбираешь все строки, а потом вручную ищешь совпадение - это глупо.
    Лучше попроси БД найти нужные тебе строки.
    cur.execute('SELECT id, name FROM users WHERE chat_id = ?', (call.message.chat.id,))


    К слову, что ты подразумеваешь с под "третья"? Индекс 3? Или "третья с начала" (индекс 2)?
    Ответ написан
    Комментировать
  • Почему падает бот?

    Vindicar
    @Vindicar
    RTFM!
    Рвётся коннект до телеграмма. Сеть - штука ненадёжная, может у провайдера админ пьяный, может, контакт плохой, может, РКН балуется.
    Допиши скрипт, чтобы при ошибке соединения бот перезапускался.
    Я бы начал с чего-то типа
    import time
    from requests.exceptions import RequestException
    
    while True:
        try:
            bot.infinity_polling(timeout=10, long_polling_timeout = 5))
        except RequestException as err:
            print(err)
            print('* Connection failed, waiting to reconnect...')
            time.sleep(15)
            print('* Reconnecting.')
    Ответ написан
    1 комментарий
  • Как правильно использовать оператор or в pyautogui?

    Vindicar
    @Vindicar
    RTFM!
    Первый вариант правильный, второй не очень.
    Но есть два но:
    1. Тебе важен только сам факт наличия картинки на экране, или нужны её координаты?
    Если нужны координаты, то лучше сделать по умному, и не искать одну и ту же картинку дважды:
    # перечисляешь в списке изображения. цикл остановится на первом найденном.
    for image in ['link.png', 'link1.png']:
        location = pyautogui.locateOnScreen(image)
        if location is not None:
            break
    else:
        image, location = None, None

    Тогда дальше сможешь проверить, если location is not None - значит, что-то нашли. Что именно - лежит в image. Где именно - лежит в location.

    2. Какая у тебя версия библиотеки pyautogui? Начиная с 0.9.41, вместо функция locateOnScreen(), не найдя изображение, не вернёт None, а выкинет исключение. Тогда код будет выглядеть как-то так:

    for image in ['link.png', 'link1.png']:
        try:
            location = pyautogui.locateOnScreen(image)
        except pyautogui.ImageNotFoundException:
            pass
        else:
            break
    else:
        image, location = None, None
    Ответ написан
    Комментировать
  • Возникает ошибка, но не знаю какая?

    Vindicar
    @Vindicar
    RTFM!
    Волшебный человечек пришел в магазин и обнаружил, что у него есть ровно по две монетки каждого достоинства.

    Я не вижу, как ты учитываешь этот факт. Если ты прочитал со входа номиналы монет "5 10 50 100", то тебе нужно использовать для разложения список монет [5, 5, 10, 10, 50, 50, 100, 100].
    Ответ написан
  • Как это решать?

    Vindicar
    @Vindicar
    RTFM!
    1. Подумать.
    2. Написать код.

    А если серьёзно, задача сводится к разложению числа на заданные слагаемые. Это гуглится.
    Один из способов (необязательно самый быстрый) - рекурсивное разложение. Упрощенно, перебираешь все Ai меньшие N. Выкидываешь это Ai из рассматриваемого набора, и затем рекурсивно пытаешься составить число (N - Ai) из всех Aj, меньших или равных Ai (так как большие слагаемые ты уже рассмотрел).
    Углубляясь в рекурсию, рано или поздно ты наткнёшься на одну из двух ситуаций:
    а) среди Aj есть число, равное искомому. Решение найдено, осталось размотать рекурсию обратно и собрать в кучку использованные Ai.
    б) нет ни одного Aj, меньшего или равного искомому числу. Решения нет.
    В твоём случае будет ещё случай в) Сумма всех Ai меньше N. Решения нет, заплатить не удастся. Это можно проверить вообще сразу.

    Реализовать будет проще, если отсортируешь Ai в порядке убывания. Тогда вместо удаления Ai из списка слагаемых достаточно будет выбрать индекс i, с которого будешь начинать рассмотрение слагаемых - все элементы до i-го либо слишком велики, либо уже были рассмотрены и не пригодились.
    Ответ написан
    3 комментария
  • Как замокать метод __next__?

    Vindicar
    @Vindicar
    RTFM!
    Вообще делать return self из __iter__() не очень хорошая идея.
    Или верни итератор по внутренней коллекции, т.е. iter(self.nums). Это имеет смысл, так как чтение коллекции циклом for по-хорошему не должно приводить к её модификации. Для этого лучше сделать явный метод.
    Или сделай из __iter__() генератор, и делай yield значения.

    В обоих случаях определять __next__() не потребуется.
    Ответ написан
    2 комментария