Задать вопрос
Ответы пользователя по тегу Python
  • Как выписать значения user_id в таблице users через запятую?

    Vindicar
    @Vindicar
    RTFM!
    1. fetchall() возвращает список из кортежей. Эти две структуры в питоне встречаются очень часто, приёмы работы с ними нужно знать.
    2. Когда ты организовал цикл по строкам, и вытащил из каждой строки id, используй f-строки для подстановки значения в строку. Полученные отформатированные строки складывай в ещё один список (ты ведь прочитал ссылку выше и освоил работу со списками?)
    3. Когда у тебя готов список строк вида @idXXXXXX, собери его в одну строку методом join().

    И да, всё вышеперечисленное - азы языка. Если ты не знаешь их, хвататься за базы данных рановато.
    Ответ написан
    Комментировать
  • Не отображается окно tkinter при выполнение функции, из-за чего?

    Vindicar
    @Vindicar
    RTFM!
    Потому что ты не понимаешь разницу между передачей ссылки на функцию и вызовом функции.
    screen.protocol("WM_DELETE_WINDOW", block_mouse())
    Ты пытаешься задать в качестве обработчика результат вызова функции block_mouse(), а не саму функцию.
    А поскольку это происходит в block_mouse(), то программа уходит в рекурсию.
    Ответ написан
  • Как заставить работать двух ботов одновременно без использования двух консолей?

    Vindicar
    @Vindicar
    RTFM!
    Как правило, точкой входа в бота является функция, которая уходит в вечный цикл и сидит там. Код после этой функции тупо не выполнится, пока бот не завершит работу.
    Таким образом, при попытке активировать двух ботов "наивным" образом работать будет только первый.
    Тебе придётся запускать их в разных потоках или даже в разных процессах.
    Ответ написан
    1 комментарий
  • Здравствуйте. Как создать удаление правил на Aiogram?

    Vindicar
    @Vindicar
    RTFM!
    Gagak,
    1. Документация тебя выведет на два метода.
    а) bot.delete_message() подходит, если тебе известно только id сообщения.
    б) Message.delete() это обёртка над предыдущим. Удобно, если у тебя есть объект сообщения (экземпляр класса Message), который нужно удалить.
    Первый метод вообще гуглится первой строкой по "aiogram delete message".
    2. Тебе нужно хранить список пользователей, которые обращались к твоему боту, например, в таблице БД.
    Хранить можно в виде пар id пользователя - id сообщения с правилами. При каждом обращении к боту проверяем наличие пользователя в списке.
    Если пользователя нет в списке, он обращается в первый раз - отправляем сообщение с правилами, заносим в таблицу id пользователя и id сообщения.
    Если пользователь есть в списке и у него есть id сообщения - проверяем, согласился ли он. Если согласился, удаляем сообщение по id (если получится - сообщение старше 48 часов уже не удалить), затем очищаем id сообщения (например ставим NULL), но оставляем пользователя в списке.
    Если пользователь есть в списке и у него id сообщения пустое (NULL), то он уже согласился с правилами, можно работать.
    Ответ написан
  • Как получить ошибку из os.system?

    Vindicar
    @Vindicar
    RTFM!
    Никак.
    Используй модуль subprocess, он позволяет общаться с запускаемой программой через стандартынй ввод/вывод, в т.ч. стандартный вывод ошибок.
    Ответ написан
    Комментировать
  • Как написать красивый и понятный код?

    Vindicar
    @Vindicar
    RTFM!
    Разбей программу на две части.
    1. Класс "игровое поле". Хранит и сообщает (но не показывает на экране!) текущее состояние поля игры, позволяет делать ходы, отслеживает их очерёдность и корректность, определяет завершение игры и победителя (если есть). Словом, содержит в себе собственно логику игры.
    2. Класс "окно игры". Держит у себя ссылку на экземпляр класса "игровое поле", показывает его состояние, т.ч. состояние игры в целом, вызывает метод хода согласно действиям пользователя.
    2,5. Основная программа. Создаёт поле, создаёт окно игры, показывает его на экране, уходит в рабочий цикл (mainloop).
    Ответ написан
    Комментировать
  • Как отнять текущую дату от даты?

    Vindicar
    @Vindicar
    RTFM!
    Твой реальный вопрос: как распарсить строку в объект datetime.
    Для простых строк работает datetime.datetime.strptime()

    После того как обе даты представлены как datetime, их можно вычесть.
    Ответ написан
    Комментировать
  • Как скопировать папку в другое место?

    Vindicar
    @Vindicar
    RTFM!
    Если у папки есть иконка, она наверняка заведомо не пустая. Проверь наличие скрытых файлов.
    А вообще посмотри в сторону shutil.copytree()
    Ответ написан
    Комментировать
  • Как сформировать подсказки в Python при написании кода?

    Vindicar
    @Vindicar
    RTFM!
    Пиши doc-string для функций и методов в формате, который понимает твой редактор.
    Ответ написан
    Комментировать
  • Как убрать скобки во время парсинга?

    Vindicar
    @Vindicar
    RTFM!
    Эта запись означает словарь - типовую структуру данных в Питоне.
    Формулировка твоего вопроса выдаёт тот факт, что ты про него не знаешь - иначе сразу бы узнал запись.
    Так что Dr. Bacon прав - открывай хороший учебник (ну или мою ссылку) и учись. Без знания основ языка написать сколь-нибудь сложную программу можно, но времени и сил уйдёт куда больше, чем на изучение этих самых основ.
    "Лучше день потерять, зато потом за пять минут долететь". (с)
    Ответ написан
  • Как решить проблему sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: article?

    Vindicar
    @Vindicar
    RTFM!
    Ну так ты таблицу в БД не создал, только модель описал. Она автоматически не создаётся, для создания таблиц нужно вызывать отдельный метод db.create_all().
    Ответ написан
    1 комментарий
  • Как обойти выход за границы двумерного массива?

    Vindicar
    @Vindicar
    RTFM!
    3. Исправить циклы
    range(1, len(b) - 1)
    range(1, len(b[i]) - 1)
    Ответ написан
    Комментировать
  • Как сделать выбор координат на клик в OpenCV?

    Vindicar
    @Vindicar
    RTFM!
    Сделай список, добавляй в него кортежи (x, y).
    Если по клику список достиг полной длины, уже действуй дальше.
    Ответ написан
  • Как не писать каждый раз название класса перед переменной в Python?

    Vindicar
    @Vindicar
    RTFM!
    Я бы сказал, паскалевский with оказывается даже более многословен, чем код без него.
    А учитывая, что Питон не позволяет даже опускать self, т.е. требует явно писать self.attribute и self.method() вместо attribute и method(), можно догадаться, что такого там точно нет.

    Если тебе требуется записать ну очень много атрибутов - закинь их в словарь, и используй цикл + setattr().
    Но вообще, если у тебя так много атрибутов, это обычно означает плохое проектирование программы.
    Ответ написан
  • Как в момент задержки выполнять другую часть кода?

    Vindicar
    @Vindicar
    RTFM!
    Зависит от того, что имеется ввиду под "в момент задержки".
    "Вместо задержки"? Т.е. второй код выоплняется, когда начинается задержка, и останавливается по её окончанию? Тогда выполняй код вместо вызова time.sleep()
    Нужно выполнять вторую часть кода независимо, но только тогда, когда первая часть кода не работает? Так работают асинхронные приложения, читай про них. Их сложнее понять, но проще синхронизировать, т.е. избегать столкновений между двумя частями кода.
    Нужно выполнять вторую часть кода абсолютно независимо от первой, чтобы там первая ни делала? Это уже в сторону многопоточности. Она проще в понимании, но сложнее, если обеим частям кода нужен доступ в одни и те же переменные.
    Ответ написан
    Комментировать
  • Как исправить краш telebot?

    Vindicar
    @Vindicar
    RTFM!
    Очевидно, если немножко подумать.
    Крэш из-за того, что ты обращаешься ко второму (индекс 1) элементу списка, который имеет только один элемент.
    Значит, нужно вынести список (результат работы message.text.split() ) в отдельную переменную, чтобы проверить длину этого списка. Если длина > 1, значит, второй элемент существует, значит, можно работать.
    Ответ написан
  • Как сделать Python loop +1/-1?

    Vindicar
    @Vindicar
    RTFM!
    Избавиться от цикла for, вместо него используй while True, и внутри вручную меняй индекс текущего изображения в диапазоне от 0 до len(imList)-1.
    А вообще у тебя код кривой.
    cv2.imshow() требует два параметра - заголовок окна и загруженное в память изображение (массив пикселей).
    cv2.waitKey() и cv2.waitKeyEx() возвращают код нажатой клавиши, анализируй его, чтобы понять, что делать (идти вперёд, идти назад, прервать цикл).
    Ответ написан
    5 комментариев
  • Проблема с io.BytesIO()?

    Vindicar
    @Vindicar
    RTFM!
    Текущая позиция при truncate() не обновляется. Так что после отправки сделай снова
    fp.seek(0)
    fp.truncate()
    Ответ написан
    Комментировать
  • Как отправить запрос к сайту через определенный DNS-сервер в python?

    Vindicar
    @Vindicar
    RTFM!
    Есть довольно старый ответ на стэковерфлоу. requests под капотом использует urllib3, а та содержит функцию urllib3.util.connection.create_connection(), ответственную за установку TCP соединения. Соответственно, можно попробовать подменить эту функцию на свою реализацию, и использовать пакет dnspython для запросов.
    from urllib3.util import connection
    import dns.resolver
    
    def your_dns_resolver(hostname: str) -> str:
        """Получает на вход доменное имя, возвращает IP адрес в виде строки."""
        resolver = dns.resolver.Resolver(configure=False)
        resolver.nameservers = ["8.8.8.8"]  # список используемых DNS серверов.
        answer = resolver.resolve(hostname, "A")  # A-запись для IPv4 адреса, AAAA-запись для IPv6 адреса
        if len(answer) == 0:
            raise Exception("No A record found")
        return str(answer[0])
    
    _orig_create_connection = connection.create_connection
    
    def patched_create_connection(address, *args, **kwargs):
        """Wrap urllib3's create_connection to resolve the name elsewhere"""
        host, port = address  # оригинальный адрес для запроса
        hostname = your_dns_resolver(host)  # сами определяем IP по имени
        return _orig_create_connection((hostname, port), *args, **kwargs)  # дёргаем оригинальную функцию, чтобы создать соединение
    
    connection.create_connection = patched_create_connection

    Код не проверял, это скорее концепт чем готовый инструмент.
    Ответ написан
    9 комментариев
  • Как в Python подружить ввод данных с модулем?

    Vindicar
    @Vindicar
    RTFM!
    Смешались в кучу кони, люди...
    Чтобы узнать жерезо компа по сети, нужно, чтобы на компе работала программа, готовая получить эту информацию и отдать её по сети.
    Под виндой есть инструмент Windows Management Instrumentation (WMI), который позволяет собрать уйму информации о компе, присутствует всегда (насколько я знаю) и отвечает в т.ч. по сети. Так что готов спорить, что твой powershell скрипт просто обращается к нему.
    Увы, WMI базируется на открытом стандарте, но напичкан несовместимыми расширениями, так что имитировать его наличие на линукс-сервере может быть нетривиально. Спасибо Микрософту.

    Под никсами есть программа lshw (требуется установка из репозитория), она выдаёт выхлоп в консоль или в файл. Можно заставить целевые машины при загрузке запускать lshw и складывать результат на сетевой диск в формате xml, например. А оттуда уже собирать инфу самостоятельно.
    Ответ написан
    Комментировать