Задать вопрос
Ответы пользователя по тегу Python
  • Как создать окно/полноценное приложение на чистом Python?

    Vindicar
    @Vindicar
    RTFM!
    Если на чистом питоне без tkinter, то кроссплатформенного решения нет.
    Под винду - ctypes + windows api, но это очень, очень мучительное решение.
    Под никсы... вот честно, я фз. Не удивлюсь, если там нужно привязываться к конкретному оконному менеджеру...
    Ответ написан
  • В чем ошибка при использовании replace()?

    Vindicar
    @Vindicar
    RTFM!
    У объекта "открытый файл" действительно нет метода replace(). Этот метод есть только у строк.
    И ты открываешь файл для записи, тем самым опустошая его содержимое.
    И вызов close() не нужен, так как по выходу из with файл закроется автоматически.

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

    Vindicar
    @Vindicar
    RTFM!
    У тебя в matrix_1 будут строки, а не числа.
    Ответ написан
    1 комментарий
  • Как заносить ники людей из дискорда (discord.py) в базу данных sqlite3?

    Vindicar
    @Vindicar
    RTFM!
    Во-первых, сама идея - плохая, так как ник можно менять. Используй числовой id пользователя вместо ника.
    Во-вторых, никогда не формируй текст запроса через форматирование строк. Используй подстановку параметров.
    Ответ написан
    Комментировать
  • Нужна с помощь с discord.py?

    Vindicar
    @Vindicar
    RTFM!
    f"SELECT id FROM userifo where id={member.id}
    Никогда так не делай.
    А вообще, что ты пытаешься сделать? Перебрать все сервера и занести их участников в БД?
    Во-первых, у класса Client (и у его наследника discord.ext.commands.Bot) есть свойство guilds. Это список отдельных серверов, можешь просто перебрать его for'ом.
    Во-вторых, в sqlite есть синтаксис INSERT ON CONFLICT UPDATE, который позволяет добавить запись или обновить её, если она уже существует, за один запрос а не за два.
    В-третьих, твой алгоритм перебора не сумеет обнаружить участников, покинувших сервер, так как они просто не появятся в списке участников.
    В-четвёртых, если ты не понимаешь, зачем в коде та или иная строка, тебе рано браться за написание ботов. Поучи сначала основы питона, почитай документацию на discord.py, потом вернёшься к теме. Сэкономишь много времени на вопросах.
    Ответ написан
    Комментировать
  • Как правильно вынести функции с декораторами в отдельные файлы и потом загрузить в основной?

    Vindicar
    @Vindicar
    RTFM!
    Завернуть во внешнюю функцию и передать нужные объекты как параметры.
    def setup(handler, bot, app):
        @handler.on_message()
        def do_stuff(event):
            pass
    
        @app.route('/stuff')
        def route_stuff():
            return "stuff"

    Тогда в основном коде делаешь просто
    import my_module
    my_module.setup(handler, bot, app)

    Только нужно гарантировать, что setup() будет вызван строго однажды.
    Ответ написан
    Комментировать
  • Не могу решить задачу в питоне с помощью zip?

    Vindicar
    @Vindicar
    RTFM!
    Ну zip() тут ни к селу ни к городу... но в принципе можно использовать.
    1. Введи строку.
    2. Разбей на слова (split() в помощь)
    3. Найди такое наибольшее N, что длина списка слов больше N*N. Т.е. если в списке 6 слов, то N будет 2, так как при N = 3 нам понадобится 9 слов для таблицы. Найти можно просто, извлеки корень из длины списка и отбрось дробную часть.
    4. Построй список списков. Каждый элемент (т.е. каждый вложенный список) будет одним столбцом таблицы, и будет иметь длину N. Т.е. если оригинальный список слов будет words, то мы получим
    columns = [ words[0:N], words[N:2*N], words[2*N:3*N], ... ]
    и так далее. Так как число вложенных списков равно N, т.е. заранее неизвестно, это нужно будет сделать циклом.
    5. Сделай цикл вида for row in zip(*columns):, тогда у тебя zip() возьмёт сначала первый элемент каждого столбца, и скомпонует из них кортеж row. Потом второй из каждого, потом третий, и т.д.
    6. Строки из каждого кортеж row нужно вывести, разделив пробелом. Тут можно метод str.join() использовать.
    Ответ написан
    Комментировать
  • Как наложить одно изображение на другое в телеграмм боте?

    Vindicar
    @Vindicar
    RTFM!
    Подозреваю, что file - это файловый объект, а не файл на диске. Так что file_path не соответствует никакому пути на твоей машине.
    Ответ написан
  • Возможно как-то запускать ffmpeg не через консоль?

    Vindicar
    @Vindicar
    RTFM!
    К сожалению, большинство библиотек для работы с ffmpeg тупо запускают экзешник с параметрами, тем самым наследуя все его косяки. Так что особого выигрыша тут нет.
    Гипотетически ты мог бы попытаться взять libffmpeg-c или аналог, скомпилировать под нужную тебе платформу (DLL для винды, so для линукса) и использовать модуль ctypes для работы с ней. Но это, боюсь, будет ещё сложнее.
    Ответ написан
    2 комментария
  • Почему or в python не работает?

    Vindicar
    @Vindicar
    RTFM!
    Потому что ты не понимаешь как работает or.
    И не ты первый. Мне вот реально интересно, откуда вообще берётся идея, что логический (в первую очередь) оператор можно использовать таким образом? Машинный перевод с русского на питон, что ли? "Если айди равен тому ИЛИ этому"?
    И что ты пытался сделать? Проверить, что iduser не равно ни одному из указанных id? Так тогда тебе не or нужен.
    if iduser != АЙДИ1 and iduser != АЙДИ2:
    Если айдишек много, практичнее будет in.
    if iduser not in [АЙДИ1, АЙДИ2]:
    Ответ написан
  • Почему при запуске бота пишет ошибка sqlite3.OperationalError: near "bazaa": syntax error?

    Vindicar
    @Vindicar
    RTFM!
    В коде каша. С одной стороны, вроде знаешь про плейсхолдеры, но не синтаксис SQL:
    cursor.execute('INSERT OR IGNORE bazaa (user_id, user_name, username) VALUES (?, ?, ?)', (user_id, user_name, username))

    А в другом месте кода с точностью до наоборот.
    INSERT INTO USERS (user_id, username, first_name,  last_name) VALUES ({user}, "{username}", "{first_name}", "{last_name}", "{ctime()}");

    Почитай про синтаксис INSERT и ON CONFLICT и никогда не формируй запросы форматированием строк.
    Ответ написан
  • Как проверить неопределенное количество элементов?

    Vindicar
    @Vindicar
    RTFM!
    Если each - это список, то тогда составь множество строк, соответствующих каждому элементу each.
    Ты не написал, что такое self.strs, так что приходится использовать его.
    strs_each = set( sefl.strs[e] for e in each )
    А дальше просто, если длина strs_each больше 1, то есть разные строки.
    Ответ написан
    1 комментарий
  • Сan only concatenate list (not "str") to list?

    Vindicar
    @Vindicar
    RTFM!
    s2 = values+'@'+keys
    values будет списком, keys (почему keys, когда это отдельный ключ?) - строкой, как и '@'. Собственно, тебе ошибка про это и говорит.
    Что ты вообще ожидал получить в s2?
    Ответ написан
    Комментировать
  • Как добавить парсер в дискорд бот?

    Vindicar
    @Vindicar
    RTFM!
    n = print(item['name'])
    В-первых, ничего не выводит куда?
    Во-вторых, print() выводит данные в стандартный вывод, обычно в консоль. В дискорд через неё ничего не послать.
    Во-третьих, print() всегда возвращает None. Так что n всегда будет None, и присваивание не имеет смысла.
    В-четвертых, почему не использовать нормальный обработчик команд из discord.ext.commands.Bot? Он тоже позволяет реагировать на сообщения, в придачу к остальным полезностям именно для бота. Это при условии, что ты хочешь именно реакцию на сообщение и не согласен обойтись обычной командой.
    В-пятых, если ты не уверен, что такое print(), почему ты пытаешься писать ботов?

    Ну про мелочи, вроде "бот парсит игры только при запуске, и не обновляет информацию в дальнейшем" я не говорю...
    Ответ написан
    Комментировать
  • Как развернуть окно консоли или закрепить его поверх окон при помощи python?

    Vindicar
    @Vindicar
    RTFM!
    Если под Windows, то придётся использовать WinAPI.
    GetConsoleWindow() чтобы получить дескриптор окна консоли.
    SetForegroundWindow() чтобы сделать это окно активным.
    SetWindowPos() вообще для перемещения/изменения размеров окна, но также имеет параметры для задания окна "поверх всех".
    Для вызова функций WinAPI из-под питона смотри модуль ctypes.
    Ответ написан
    Комментировать
  • Что значит check_same_thread? В Python sqlite3?

    Vindicar
    @Vindicar
    RTFM!
    sqlite3 не потоко-безопасна - если ты одновременно обращаешься к базе из нескольких потоков, это может запороть базу.
    Соответственно, по умолчанию библиотека проверяет, что подключение к базе используется тем же потоком, который создал этот подключение - т.е. что оно ограничено рамками одного потока. Если это не так, выбрасывается исключение. Это поведение по умолчанию, чтобы новички потом не плакались "почему у меня иногда база портится?!!"

    Но если ты очень осторожен и не допускаешь одновременных запросов (с помощью синхронизации по мьютексу. например), то можно безопасно использовать одно подключение из нескольких потоков. Тогда можно сказать sqlite "не дергайся насчёт потоков, я знаю что делаю". Вот эту возможность (подавить проверку) и предоставляет параметр check_same_thread = False.
    Ответ написан
    Комментировать
  • Как реализовать программу, с возможностью добавления команд из UI?

    Vindicar
    @Vindicar
    RTFM!
    Хранить список команд в каком-то хранилище, очевидно.
    Формат хранилища - на твоё усмотрение.
    ini файл легко правится пользователем (при необходимости), но ограничен в сложности структуры (секции - значения, два уровня).
    json файл менее человеко-читаем, но поддерживает произвольную вложенность (можно представить дерево объектов).
    БД типа sqlite не человеко читаема от слова "совсем", но позволяет формировать более сложные структуры чем дерево.

    С учётом специфики задачи, я бы посоветовал json.
    Ответ написан
    Комментировать
  • Как удалить русские буквы в текстовом файле?

    Vindicar
    @Vindicar
    RTFM!
    Только русские? А что насчёт иероглифов? Или речь о всех символах, не входящих в ASCII?
    В первом случае:
    import re
    s = "privet брат"
    s1 = re.sub('[а-яё]', '', s, flags=re.I)

    Во-втором случае:
    s1 = s.encode('ascii', errors='ignore').decode('ascii')
    Ответ написан
    2 комментария