Задать вопрос
Ответы пользователя по тегу Python
  • Данные из буфера не обновляются, что сделать?

    Vindicar
    @Vindicar
    RTFM!
    Сейчас код сначала получает текст, содержащий координаты точек из буфера обмена, потом разбирает и проверяет каждую строку и переспрашивает нужна ли она, а потом уже входит в цикл while True, где он их прокликивает и ожидает нажатия w или q.
    Нужно всю ту часть, где определяются координаты, а также сам код прокликивания внести внутрь ветки w.

    Как именно - спрашивай у того, кто написал код.
    Ответ написан
    Комментировать
  • Как сделать проверку роли у пользователя и выдачи второй роли, если первая роль есть?

    Vindicar
    @Vindicar
    RTFM!
    Программа не работает как именно? Отсутствие реакции? Сообщение об ошибке? Комп встаёт со стола и идёт искать Сару Коннор?
    Далее, ты проверил, on_guild_update() вообще вызывается? Хотя бы временный print() в начало вставь.
    Потому что если почитать документацию, там английским по белому написано:
    This requires Intents.guilds to be enabled.

    Какие интенты ты задаёшь боту?

    Ещё важнее: а причём тут вообще on_guild_update()? Это событие отрабатывает, когда изменяются настройки сервера, а из твоего описания следует, что тебя интересуют роли участников. За это отвечает on_member_update().

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

    Vindicar
    @Vindicar
    RTFM!
    Дополню ответ выше: для print() поведение можно настроить параметром sep. Например:
    print(1, 2, 3)  # 1 2 3
    print(1, 2, 3, sep='')  # 123
    print(1, 2, 3, sep=', ')  # 1, 2, 3

    А еще есть параметр end:
    print(1, 2, 3)  # 1 2 3 с переводом на новую строку
    print(1, 2, 3, end='')  # 1 2 3 без перевода на новую строку
    print(1, 2, 3, end=':')  # 1 2 3: без перевода на новую строку

    Так что строку, выводимую print(*args), можно описать так:
    sep.join(str(arg) for arg in args) + end
    Ответ написан
    1 комментарий
  • Как в Python можно изменить запись в CSV?

    Vindicar
    @Vindicar
    RTFM!
    Нет, по-простому нельзя. Единственный простой подход (который показал выше Максим Припадчев) - загрузить целиком в память, там изменить, потом выгрузить назад. Для больших CSV файлов это ресурсоёмко.

    CSV вообще не предназначен для долговременного хранения данных - скорее, для импорта/экспорта.

    Ты мог бы попытаться использовать методы tell() и seek(), чтобы "запомнить" позицию удаляемой строки, а затем в цикле копировать всё что идёт после, "пододвинув" содержимое внутри файла, а потом уже дописать в конец изменённую строку. Но это всё равно долго.

    Лучше импортируй файл в базу SQLite, и работай в дальнейшем уже с ней.
    Ответ написан
    3 комментария
  • При запуске элементарного кода(правильного) на vkbottle выдает огромное количество ошибок. Что делать?

    Vindicar
    @Vindicar
    RTFM!
    aiohttp.client_exceptions.ClientConnectorCertificateError: Cannot connect to host api.vk.com:443 ssl:True [SSLCertVerificationError: (1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1002)')]

    У тебя или провайдер сильно хитропопый, или вирусня на компе. Самоподписанных сертификатов в цепочке сертификатов для любого нормального сайта быть не должно и точка, а для контакта тем более. Так что кто-то пытается перехватить соединение. Кто - без понятия. Проверь на заведомо чистой машине и работая через VPN, также проверь список установленных корневых сертификатов, нет ли там чего странного. Как - написано в гугле.
    Ответ написан
  • Как верно настроить вероятность в мини - игре?

    Vindicar
    @Vindicar
    RTFM!
    0. Главное: вопрос у тебя звучит "Как верно настроить вероятность". В коде ровно одна строчка с random, и ты не объясняешь что она делает. Собственно, и правила игры (т.е. желаемое поведение кода) ты не озвучил. Что такое "подкрутка"? Что тут посоветуешь...
    1. Если ты ловишь себя на том, что создаёшь переменные вида mine_3, mine_4, mine_5, а дальше делаешь x = eval(f"mine_{mines_kolv}[{now_state}]") тебе нужна индексируемая коллекция! Список или кортеж. Тем более что списки ты уже используешь, значит, знаешь, что это такое. Неужели "список из списков" - это такая сложная концепция?
    2. У тебя в самом первом SQL-запросе подстановка параметров выполняется корректно, а дальше идёт ересь с использованием %-форматирования. Не надо так.
    3. У тебя куча таблиц, из которых ты вытаскиваешь по одному значению. Если эти значения всегда требуются вместе, почему не объединить их в одну таблицу?

    Короче, лучшее, что тут можно посоветовать - выкинуть этот код полностью (он исправлению не поддаётся), отложить бота, подучить язык и его средства, в частности, структуры данных и приёмы работы с ними. А потом уже вернуться к боту. Так хотя бы не будешь спотыкаться на простых операциях.
    Ответ написан
    Комментировать
  • Почему не удаётся найти путь?

    Vindicar
    @Vindicar
    RTFM!
    AudioSegment.converter = f"{os.getcwd()}\\ffmpeg.exe"

    Ты уверен, что файл лежит в текущем каталоге? Это не то же самое, что каталог программы.
    Если тебе нужен каталог программы, лучше его и взять:
    from pathlib import Path
    import sys 
    
    SCRIPT_DIR = Path(sys.argv[0]).parent.resolve()
    FFMPEG = SCRIPT_DIR / 'ffmpeg.exe'  # чтобы не париться с разделителем каталогов (/ или \)
    Ответ написан
    Комментировать
  • Как запихнуть в threading.Timer() async-функцию?

    Vindicar
    @Vindicar
    RTFM!
    Если ты хранишь ссылки в БД, то я бы просто сделал отдельную задачу через create_task(), которая с некоторой периодичностью выбирает из БД истекшие ссылки (запрос будет вполне тривиален), рассылает по ним оповещения, а потом удаляет из БД. При таком сценарии таймаут на ссылку переживёт перезапуск бота.
    В принципе можно и без БД, лишь бы в твоём хранилище ссылок хранились сведения о том, когда ссылка должна истечь.
    Ответ написан
    Комментировать
  • Как получить доступ к свойству объекта JSON не зная его название?

    Vindicar
    @Vindicar
    RTFM!
    JSON-объекты загружаются в простой питоновский словарь (а массивы - в список).
    Так что окей, гугл, перебор элементов словаря python.

    В твоём случае что-то вроде
    pages = info["query"]["pages"]
    for page_id, page_data in pages.items():
        ...   # что-то делаешь с page_id и page_data


    Если ты уверен, что у тебя всегда ровно один элемент в словаре, и его ключ тебя не интересует, то можно и так:
    pages = info["query"]["pages"]
    if pages:  # есть что-то в словаре?
        page_data = list(pages.values())[0]
        ...   # работаешь с page_data
    Ответ написан
    1 комментарий
  • Как запустить скрипт используя subprocess и venv из которого запущен главный скрипт?

    Vindicar
    @Vindicar
    RTFM!
    Найди бинарник python, который лежит в этом venv, и укажи его полный путь вместо просто python.
    Но так как ты дожидаешься завевршения скрипта, может иметь смысл такой хак:
    # my_script.py
    import sys
    
    def main(args: list[str]):
        """Тело скрипта здесь..."""
    
    if __name__ == '__main__':
        # скрипт запущен независимо
        main(sys.argv[1:])

    А в главном скрипте будет просто
    import my_script
    
    my_script.main(['--work-dir', work_dir, '--result-dir', result_dir])


    В этом случае тебе не придётся сильно переделывать my_script. Но зато теряешь в удобстве вызова кода, например, если нужно получить значение из этого скрипта.
    Чем больше ты вынесешь из main() в отдельные подпрограммы - тем больше контроля будет у главного скрипта, но и тем больше работы.
    Ответ написан
    Комментировать
  • Почему не получается передать значение в экземпляр класса?

    Vindicar
    @Vindicar
    RTFM!
    self.ship = Ship(screen)
    Ты пытаешься передать в конструктор Ship() локальную переменную screen, которой у тебя нет.
    Тут не C#, если обращаешься к полям класса - явно указывай self.
    Ответ написан
    3 комментария
  • Как произвести сортировку в таблице SQLite3, после удаления записи?

    Vindicar
    @Vindicar
    RTFM!
    Ты просто не понимаешь сути первичного ключа.
    Это значение, которое однозначно идентифицирует строку, независимо от наличия и количества других строк в таблице. И точка. Он не должен меняться вообще за время жизни строки.
    Бывают случаи, когда у нас уже есть уникальное значение, которое можно использовать как ключ.
    Но куда чаще используются синтетические ключи, т.е. просто числа, которые пользователь по-хорошему и видеть-то не должен никогда. А раз так, то какая разница, есть ли дырки в нумерации?
    Я больше скажу, иногда сплошная нумерация - это слабое место в системе.
    Ответ написан
    Комментировать
  • Почему не парсятся ссылки на python?

    Vindicar
    @Vindicar
    RTFM!
    Ну значит тут что-то накосячил:
    images = [img.strip() for img in lines[2][8:].split(',')]

    Не видя перед собой примера данных, трудно сказать что именно.

    EDIT: Проблема в строке lines = article.strip().split('\n')
    Ты почему-то думаешь, что у тебя весь текст статьи будет на одной строке. Это далеко не так.
    Единственный маркер, который у тебя есть - Images: в начале одной из строк. И да, если такое встретится в тексте статьи - парсер сломается.
    Ответ написан
    1 комментарий
  • Как войти в аккаунт на сайте с помощью python requests?

    Vindicar
    @Vindicar
    RTFM!
    Добавь заголовки запроса, в качестве реферера поставь тот же URL.
    Как это сделать, читай в доках requests.
    Ответ написан
    Комментировать
  • Почему то при запуске кода в pycharm срабатывает ошибка 0, и тг бот не реагирует на команды. Как исправить?

    Vindicar
    @Vindicar
    RTFM!
    Учи азы программирования.
    Exit code 0 в практически любой операционной системе означает, что программа завершилась без ошибок. Это относится и к программам на питоне - они завершаются с кодом 0, если выполнение спокойно дошло до конца файла без непойманных исключений. Есть ещё функция sys.exit(), но про неё сам почитаешь.

    А в твоём случае ты накосячил в обёртке тела программы. Правильно будет
    if __name__ == "__main__":
    Тоже советую погуглить и почитать, что это, как работает, и зачем оно.
    Ответ написан
    5 комментариев
  • Не работают кнопки в discord.py, что делать?

    Vindicar
    @Vindicar
    RTFM!
    @Code.bot.command()
    На момент выполнения этого декоратора класс ещё не закончил создаваться, а значит, не был присвоен имени Code.
    Почитай документацию на либу, как правильно создавать коги и каким декоратором в них отмечать команды.
    Для discord.py это @commands.command().
    Ответ написан
  • Как вы боритесь с циклическими импортами в Python?

    Vindicar
    @Vindicar
    RTFM!
    Если речь идёт об импорте только ради type hinting, то typing.TYPE_CHEKING в помощь.
    Ответ написан
    Комментировать
  • Есть ли способ аннотировать аргументы метода переменной класса?

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

    Vindicar
    @Vindicar
    RTFM!
    Ну если простейшее решение...
    Таймаут на connect(), connect() завернуть в try-except, который ловит socket.timeout и спит несколько секунд. Всё это завернуть в while True.
    Ответ написан
    Комментировать
  • Проблема с этим Введите корректный числовой код?

    Vindicar
    @Vindicar
    RTFM!
    Используй user: disnake.Member вместо id: int, удобнее будет. И почитай доки на тему.
    Ответ написан