• Что не так с кодом Python?

    Vindicar
    @Vindicar
    RTFM!
    Потому что ты неверно понимаешь логику своей программы.
    Если у тебя не найдётся 1.png, вылетит исключение, и даже не будут попытки искать дальнейшие картинки - управление перейдёт в except, а затем на новую итерацию while True, где снова будет попытка искать 1.png.

    Есть и ещё ряд замечаний.
    1. На кой баклажан ты загружаешь 1.png-5.png на каждой итерации цикла? Только зря программу замедляешь. Если ты не хочешь обновлять эти файлы без перезапуска программы, то загрузи их один раз на старте.
    2. То же самое со скриншотом. Ты делаешь новый скриншот перед каждым следующим файлом - это точно хорошая идея? Вроде как надо поискать изображения на скриншоте, и только потом делать следующий.
    3. Почему ты используешь И locateOnScreen(), И matchTemplate()? Выбери ту функцию, которая лучше работает, и используй только её.
    4. Ты нифига не отслеживаешь, а что за исключение-то вылетает? Может, у тебя программа в принципе кривая, и дело не в том, что изображение не найдено. Для locateOnScreen() лови конкретно pyautogui.ImageNotFoundException. matchTemplate() исключений не кидает, так что проверяй, что locations не пуст, а имеет хотя бы один элемент. А остальные эксепшены не лови, или хотя бы выводи инфу о них в журнал работы программы.
    Ответ написан
    8 комментариев
  • В функции four_squares программа выдает ошибку как только обращается, и почему не проходит тест с этим числом 106369249365575352836589875696130383747?

    Vindicar
    @Vindicar
    RTFM!
    В питоне встроенный int поддерживает длинную арифметику, поэтому с ним можно выполнять операции даже если операнды превышают 64 бита. Но это, разумеется, медленнее, чем аппаратно-поддерживаемое число.
    Ответ написан
  • Возможно ли соединить работающий java код и так же работающий скрипт python?

    Vindicar
    @Vindicar
    RTFM!
    В принципе - конечно, возможно.
    Если один из скриптов запускает другой, через стандартный ввод/вывод.
    Если работаешь под Linux - через unix-сокет.
    Можно организовать общую область памяти через отображение файла на память (но это рискованный трюк, тут лучше использовать как можно более примитивные структуры данных).
    Ну или наиболее прямолинейное (но, возможно, чуточку более медленное) решение - через обычный сетевой сокет.

    Во всех случаях тебе придётся как-то сериализовывать свои данные на стороне отправителя, и десериализовывать на стороне получателя.
    Ответ написан
    1 комментарий
  • Как отправить разные изображения для сообщений с одинаковым содержанием в Telebot?

    Vindicar
    @Vindicar
    RTFM!
    Тебе нужен автомат состояний (finite state machine, FSM). Не знаю, есть ли его реализация в комплекте с telebot, но идея простая: нужно помнить, что пользователь делал раньше, т.е. иметь хранилище ключ-значение вида "id пользователя -> состояние+доп. инфа". В простейшем варианте хватит и словаря (если тебе не критично, чтобы сведения переживали перезагрузку бота).
    Ответ написан
    Комментировать
  • Как определить размер и координаты любого окна python?

    Vindicar
    @Vindicar
    RTFM!
    Ответ для винды - с линуксовыми оконными менеджерами я дела не имел.
    Можно посмотреть на видимый заголовок окна или на т.н. строку класса окна. Возможно, pyautogui или pywinauto могут найти окна по заголовку.
    Более сложные и надёжные решения требуют работы с WinAPI: в принципе можно найти окна, принадлежащие процессу с заданным экзешником, уточнить через заголовок/класс окна, а дальше получить их позицию.
    Проблема в том, что до WinAPI надо достукиваться через модуль ctypes, а значит, нужно уметь не только Питон, но и хотя бы основы C или C++. Я могу описать этот вариант подробнее, если захочешь связываться с этой канителью.
    Ответ написан
    Комментировать
  • Почему ответ из request, появляется только после того как зашёл сайт, с которого и пытаемся получить ответ через запрос, а так он пуст?

    Vindicar
    @Vindicar
    RTFM!
    Потому что сайт трекает кто заходит? "Ага, это вроде действительно браузер... считаем этот IP человеком на ближайшие N минут."
    Ответ написан
  • Как рисовать поверх фото в tkinter?

    Vindicar
    @Vindicar
    RTFM!
    Вместо того, чтобы изобретать велосипед, используй элемент Canvas. Он и рисовать позволяет, и изображение вставить.
    Ответ написан
    Комментировать
  • Есть ли в Python библиотека для работы с экзотическими видами прокси?

    Vindicar
    @Vindicar
    RTFM!
    Нет и не нужно, потому что клиенты этого ПО на своей стороне реализуют либо SOCKS-протокол (и тогда работаешь с socks-прокси на локальном порту), либо тупо проброс порта (и тогда вместо коннекта к удалённому ресурсу коннектишься на локальный порт). Первое встречается чаще.
    А вот если тебе нужно именно взять роль клиентского ПО... не, ну ты можешь поискать исходники того же NekoBox, он много чего поддерживает. Но этот самый NekoBox все свои поддерживаемые протоколы в итоге заворачивает в один SOCKS-прокси, так что не проще ли взять его целиком?
    Ответ написан
    Комментировать
  • Как вывести полученные данные из таблицы sql?

    Vindicar
    @Vindicar
    RTFM!
    Правильно будет:
    import sqlite3 
    
    with sqlite3.connect(r'D:\Programming\Python\base.db') as db:
        cursor = db.cursor()
        request = """ SELECT name FROM marks WHERE mark = 4 """  # выбираем один столбец
        cursor.execute(request)  # выполняем запрос на курсоре - зря, что ли, мы его создали?
        # теперь у нас курсор содержит строки выдачи - ответ на запрос
        for row in cursor:  # row - это кортеж, где элементы идут в том же порядке, что и столбцы
            name = row[0]  # у нас один элемент - столбец name. Добываем его.
            print(name)  # а дальше делаем с этим элементом что захотим
    Ответ написан
    Комментировать
  • Как сделать очередь из нескольких таймеров, каждый из которых должен исполнять свой собственный файл на Python?

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

    Если ОЧЕНЬ надо - делаешь свой планировщик на базе пакета schedule, только не забудь запустить скрипты в дочернем процессе, например, через subprocess. Но я бы не изобретал велосипед.
    Ответ написан
    1 комментарий
  • Как проверить если сообщение содержит фразу в vk_api python?

    Vindicar
    @Vindicar
    RTFM!
    Оператор in в помощь, но он учитывает регистр.
    print('Hello' in 'Hello world!')  # True
    print('hello' in 'Hello world!')  # False
    Ответ написан
    Комментировать
  • Yargy-парсер | Как задать интерпретацию рекурсивного правила вывода для извлечения неизвестного числа терминалов в качестве repeatable-атрибута факта?

    Vindicar
    @Vindicar
    RTFM!
    Как я подозреваю, проблема в том, что во всех твоих попытках при повторе SECTION повторяется и правило для заголовка секции - тогда как нужно повторять только правила для тела секции.
    Т.е. я бы сделал что-то типа такого...
    SECTION_CONTENT = forward().interpretation(Node.successors)
    SECTION_NAME = ...
    FEATURE = ...
    SECTION_CONTENT = or_(
        rule(FEATURE, SECTION_CONTENT),
        FEATURE
    )
    SECTION = rule(SECTION_NAME, SECTION_CONTENT)
    Ответ написан
  • Почему не работает публичная сеть на uvicorn?

    Vindicar
    @Vindicar
    RTFM!
    Есть ли роутер? Если да, надо пробросить порт на нём.
    Ответ написан
    1 комментарий
  • Как сделать после ввода сообщения выполнение функции в aiogram?

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

    Vindicar
    @Vindicar
    RTFM!
    Зачем ты складываешь строки в список? Почему не писать их сразу в выходной файл?
    with open("sus.txt", "r", encoding='utf-8') as source:
        idx = 1  # номер файла-приёмника
        go = True
        while go:
            with open(f'part{idx}.txt', 'w', encoding='utf-8') as dest:
                for _ in range(500):  # не более 500 строк в каждый файл
                    line = source.readline()
                    if not line:  # пустая строка = конец файла
                        go = False
                        break
                    dest.write(line)
            idx += 1
    Ответ написан
    Комментировать
  • Как бот может переслать все сообщения с канала, в личный чат пользователя?

    Vindicar
    @Vindicar
    RTFM!
    Смотря что ты понимаешь под пересылкой. Если только контент, то это тривиально.
    Бот должен знать твой id, тогда он сможет отправить тебе сообщение.
    Если бот в канале, он может реагировать на сообщения там, извлекать их контент, и формировать на этой основе своё сообщение для тебя. Заморочка будет только в том, чтобы учесть реакции на все виды контента (фото, файл, аудио и т.п.).
    Ответ написан
  • Как получить user.id боту aiogram 2.23.1 через ответ на сообщение?

    Vindicar
    @Vindicar
    RTFM!
    Из постановки задачи: тебе надо работать с сообщением, так?
    Открываешь документацию и ищешь класс, описывающий сообщение. Подсказка: обычно такой класс называется Message.
    Внимательно просматриваешь его свойства и методы, ищешь всё, что касается ответов (ключевые слова: reply, response и т.п.).
    Находишь свойство reply_to_message. Читаешь:
    reply_to_message: Message | None
    Optional. For replies in the same chat and message thread, the original message. Note that the Message object in this field will not contain further reply_to_message fields even if it itself is a reply.

    Тип данных (Message | None) и подсказка Optional говорят о том, что в этом поле может лежать либо None (очевидно, если сообщение не является ответом), либо ещё один объект Message (тогда это сообщение, на который был ответ).
    Теперь как разобраться с автором сообщения. Аналогично ищем свойства и методы класса Message по ключевым словам user, author и т.п. Находим свойство from_user.
    from_user: User | None
    Optional. Sender of the message; empty for messages sent to channels. For backward compatibility, the field contains a fake sender user in non-channel chats, if the message was sent on behalf of a chat.

    Достаточно, чтобы понять, что в этом свойстве должен лежать объект, описывающий автора сообщения.

    Теперь осталось собрать вместе логику работы бота:
    1. Бот получает уведомление о сообщении
    2. Бот проверяет, было ли сообщение отправлено в тот чат, где он должен работать (свойство chat)
    3. Бот проверяет, отправлено ли сообщение тобой (свойство from_user)
    4. Бот проверяет, является ли сообщение ответом (свойство reply_to_message)
    5. Бот получает оригинальное сообщение и извлекает его отправителя
    6. Бот банит этого отправителя

    Как забанить пользователя - упражнение для читателя.
    Учись искать и разбираться в документации, без этого навыка никуда.
    Ответ написан
    4 комментария
  • Как создать многопоточную программу обращающиеся к API?

    Vindicar
    @Vindicar
    RTFM!
    Причём тут конкретно многопоточность?
    Если дело в том, что в нескольких потоках трудно координировать обращения к API, то как выше правильно сказали - делайте очередь запросов (например, queue.SimpleQueue) и отдельный поток, который будет эти запросы выполнять с учётом лимитов.

    Например, так: поток-клиент кладёт в очередь словарь вида
    task = {'ready': threading.Event(), 'params': {...тут параметры запроса...} }
    , а потом делает
    task['ready'].wait()
    if 'error' in task:
        ... # реагируем на ошибку
    else:
        ...  # читаем результат из task['result']

    Тогда рабочий поток, реализующий обращения, будет принимать очередное задание из очереди, делать запрос к API согласно содержимому params, потом записывать результат в task['result'] или ошибку в task['error'] и делать task['ready'].set(), чтобы уведомить клиента о том, что его задание завершено.
    Ответ написан
    5 комментариев
  • Как преобразовать эмбеддинг текста в понятный сверточным слоям?

    Vindicar
    @Vindicar
    RTFM!
    Свёрточные слои работают только с изображениями (ну или с картами особенностей, что частный случай изборажений). Они ищут локальные взаимосвязи между соседними элементами изображения.

    Эмбеддинг изображением не является, в нём нет локальных вазимосвязей между элементами - он имеет смысл только при рассмотрении всех элементов эмбеддинга.

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