Ответы пользователя по тегу Python
  • Как исправить "pymysql.err.ProgrammingError: Cursor closed"?

    Vindicar
    @Vindicar
    RTFM!
    async with conn.cursor() as cur:
    По выходу из with курсор будет гарантированно закрыт, независимо от способа выхода. А у тебя дальше идёт
    await cur.execute(f'INSERT INTO profile(uid) VALUES(uid)')

    Либо внеси эту операцию внутрь with, либо создай под неё новый курсор.
    Ответ написан
    6 комментариев
  • Замена вхождений regex, разбирая каждое вхождение в Python?

    Vindicar
    @Vindicar
    RTFM!
    Читаем доку.
    The sub() method takes a replacement value, which can be either a string or a function, and the string to be processed.
    replacement can also be a function, which gives you even more control. If replacement is a function, the function is called for every non-overlapping occurrence of pattern. On each call, the function is passed a match object argument for the match and can use this information to compute the desired replacement string and return it.


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

    Vindicar
    @Vindicar
    RTFM!
    Ну разве что синтезировать текст запроса - проходить по списку полей, если поле задано, прописываем его с плейсхолдером в секцию SET, а в список передаваемых значений добавляем подставляемое значение.
    Иначе никак - насколько я знаю, SQL подразумевает что если ты не хочешь изменять значение поля в UPDATE, ты его просто не указываешь.
    Ответ написан
    Комментировать
  • Как получить код страницы?

    Vindicar
    @Vindicar
    RTFM!
    Прямо через селениум и ищи, он это позволяет.
    Ответ написан
  • Как сделать динамическую slash команду disnake?

    Vindicar
    @Vindicar
    RTFM!
    Т.е. ты хочешь чтобы в команде автоматически предлагался список доступных серверов и т.п.?
    Никак. Особенно с учётом того что команда (а значит, и её параметры) регистрируется при старте бота, а со временем этот список всё равно может измениться и потерять актуальность.
    Ответ написан
    4 комментария
  • Как сделать ответ на "/start" на aiogram?

    Vindicar
    @Vindicar
    RTFM!
    Ответ написан
    Комментировать
  • Как один цикл прерывает другой цикл?

    Vindicar
    @Vindicar
    RTFM!
    А что тут непонятного?

    Внешний цикл выполняет своё тело раз за разом. При этом пока тело не выполнится до конца, новое выполнение тела не начнётся.
    Соответственно, внутренний цикл задерживает выполнение кода в теле внешнего цикла, и тем самым задерживает весь внешний цикл.
    Ответ написан
    Комментировать
  • Как по написанной функции в python отобразить ее на графике с помощью matplotlib.pyplot, установив при этом шаг по оси х 0.1?

    Vindicar
    @Vindicar
    RTFM!
    Если в arange() не указать третий параметр, то она вернёт значения в указанном интервале от a до b с шагом 1.
    Если указать, то этот параметр будет желаемым значением шага.
    Так что просто генерируй массивы x с другим шагом, и всё.
    Ответ написан
    3 комментария
  • Получение текста между заголовкми?

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

    Vindicar
    @Vindicar
    RTFM!
    Уф. Тут очень много проблем. В первую очередь с пониманием того, как выполняется скрипт на питоне, и областей видимости.
    Для начала:
    if call.data == "yes":
          bot.send_message(call.message.chat.id, "Отлично")
          game = True

    Ты присваиваешь значение локальной переменной game, а не глобальной, которую ты описал выше.
    Далее:
    if game == True:
      def play(message):
        ...
    else:
      bot.send_message(message.from_user.id, "Напиши /reg")

    Ты понимаешь, что этот код объявлен вне функции? Как следствие, он выполнится один раз, при старте скрипта. У тебя game в этот момент не будет равно True, и функция play() не будет определена.

    Боты - это не простая тема, а боты с автоматами состояний - тем более. Поучи Питон сначала, кроме шуток.
    Ответ написан
    Комментировать
  • Python, OpenCV, tkinter все окна в одном, как реализовать?

    Vindicar
    @Vindicar
    RTFM!
    Ну так собери изображения в одно, в чём проблема?
    Пусть ты хочешь сделать такую сетку:
    A B
    C D

    Тогда ширина итогового изображения R будет max(A.shape[1]+B.shape[1], C.shape[1]+D.shape[1]), а высота max(A.shape[0]+C.shape[0], B.shape[0]+D.shape[0])
    Отступ по X для изображений B и D будет max(A.shape[1], C.shape[1]), отступ по Y для C и D будет max(A.shape[0], B.shape[0]).
    Ну а перенос прямоугольной области из массива в массив в numpy делается тривиально.
    R[0:A.shape[0], 0:A.shape[1]] = A
    R[0:B.shape[0], X:X+B.shape[1]] = B
    R[Y:Y+C.shape[0], 0:C.shape[1]] = C
    R[Y:Y+D.shape[0], X:X+D.shape[1]] = D
    Ответ написан
    Комментировать
  • Python exception, какой будет правильным?

    Vindicar
    @Vindicar
    RTFM!
    Ничерта не понял, но попробую ответить.
    1. не используй except без указания исключения, используй хотя бы except Exception - исключение по Ctrl-C (KeyboardInterrupt) не наследуется от Exception и не будет поймано. Указывать pass тоже не лучшая идея - логгируй возникающие исключения, чтобы ты мог потом устранить их причины.
    1а. waitKey() возвращает код нажатой клавиши. Сравнивай его с кодом Esc (27) и выходи из цикла так.
    2. Если нужно оперировать соседними элементами коллекции, загони её в список (если это не список) и итерируйся по индексам, а не по коллекции.
    Или for i in range(len(spisok_csv)): или for i, s in enumerate(spisok_csv):
    Ответ написан
  • Почему при нажатий Enter просто нет ответа?

    Vindicar
    @Vindicar
    RTFM!
    Гуглить не пробовал? "html submit form on enter" быстренько выводит на нужный код.
    <input type="submit" hidden />
    Причина - форма отправится без JS только если в ней есть элемент с типом submit. Но эта кнопка может быть и скрытой, на нажатие Enter это не повлияет - лишь бы она присутствовала.
    К слову, исходник формы ты не привел.
    Ответ написан
    Комментировать
  • Python Почему sqlite3 дублирует запрос?

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

    Vindicar
    @Vindicar
    RTFM!
    1. Добавь в начало файла шебанг, т.е. строку вида
    #!/usr/bin/env python
    Чтобы при запуске файла было понятно, чем его открывать
    2. Переименуй файл в add (без расширения) и сделай его исполняемым командой chmod +x add
    3. Либо помести файл в один из каталогов в переменной окружения PATH, либо добавь каталог, в котором файл лежит, в PATH.
    Загляни в скрытый файл .profile в твоём домашнем каталоге, он как раз этим занимается. Он может быть настроен так, чтобы автоматически добавлять в PATH каталог bin в твоем домашнем каталоге, тогда просто создай этот каталог и закинь файл туда.
    Ответ написан
    Комментировать
  • Not saving data to .db in python?

    Vindicar
    @Vindicar
    RTFM!
    if len(keys) > 0:
        id = int(keys[-1]) + 1
        students[str(id)] = self #you actually save the data here
    else:
        id = 1
        # where is the save operation if the db is empty?


    You should conditionally determine the id value, then UNconditionally assign it to self.id and save the entire instance to shelve.
    Ответ написан
    2 комментария
  • Как вынести обработчик сообщений в отдельный модуль?

    Vindicar
    @Vindicar
    RTFM!
    О, мой старый ответ. С тех пор я нашел, как его улучшить. Выглядит довольно коряво, но зато просто.
    def init_bot(bot):
        # и прямо тут и описываешь все обработчики. Они получат доступ к параметру bot через замыкание.
        @bot.message_handler(commands=['start'])
        def start(message):
            msg = bot.send_message(message.chat.id, f'_Введи имя:_', parse_mode='markdown')
            bot.register_next_step_handler(msg, step1)
    Ответ написан
  • Как преобразовать одномерный массив в двумерный?

    Vindicar
    @Vindicar
    RTFM!
    Ну. Код у тебя почти правильный.
    Всё что тебе осталось - это найти формулу соответствия между индексами двухмерного массива r, c и индексом одномерного массива k.
    Подсказка: значения k для массива размером 2 x 4.
    k   c=0 1 2 3
        +---------
    r=0 | 0 1 2 3 
    r=1 | 4 5 6 7
    Ответ написан
    Комментировать
  • Функция open(), не видит файл «all.json». Код пишу на Python. Как это исправить?

    Vindicar
    @Vindicar
    RTFM!
    Ты используешь относительный путь, а этот путь отсчитывается не от расположения скрипта, а от текущей директории. Она может совпадать или не совпадать с расположением скрипта, в зависимости от того, как его запускать.
    Если тебе прямо очень нужен файл именно в директории скрипта, надёжнее сделать вот так:
    import sys
    import os
    
    script_dir = os.path.dirname(sys.argv[0])
    with open(os.path.join(script_dir, 'all.json'), 'rt') as jsonfile:
        data = json.load(jsonfile)
    Ответ написан
    2 комментария
  • В чём моя ошибка?

    Vindicar
    @Vindicar
    RTFM!
    Чтобы проверить, что имя начинается и заканчивается на одну букву:
    name[0] == name[-1]

    Чтобы проверить целый список, что есть хотя бы одно такое имя:
    for name in names:
        if name[0] == name[-1]:
            print('YES')
            break
    else: # это else относится к for, а не к if!
        print('NO')

    Ну или более кратко:
    if any(name[0] == name[1] for name in names):
        print('YES')
    else:
        print('NO')


    Ввод имён в список ты уже вроде как делаешь, даже с учётом регистра.
    Ответ написан
    Комментировать