Задать вопрос
Ответы пользователя по тегу Python
  • Как при помощью кода python удалять строки из другого файла?

    Vindicar
    @Vindicar
    RTFM!
    Ну так-то регулярные выражения вам в помощь.
    Делаете цикл по строкам исходного файла. Кажду строку сверяете с набором выражений. Если совпадений не было, строки помещаете во временный файл, затем временный файл перемещаете на место исходного.

    Более важный вопрос - зачем вам это? Пытаетесь сделать чёрный список функций для недоверенного кода? Так у меня плохая новость, существует достаточно много способов это обойти.
    Ответ написан
  • Как забрать роль в discord.py?

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

    Vindicar
    @Vindicar
    RTFM!
    Если вам нужен пассивный цикл, в духе "ждём ввода, ввели exit - останавливаемся, иначе что-то делаем и снова ждём", то решение выше подойдёт.
    Если вам нужен активный цикл, который что-то делает пока пользователь ничего не ввёл, то input() не подойдёт.
    Можно соорудить что-то с потоками:
    1. главный поток запускает второй поток, который выполняет тело цикла
    2. главный поток уходит в input()
    3. по выходу из input() посылаем сигнал второму потоку остановиться и делаем join(), чтобы дождаться его.
    Ответ написан
    Комментировать
  • Как сделать чтобы строка очистилась в пайтон?

    Vindicar
    @Vindicar
    RTFM!
    Если ты имешь в виду "удалить весь текст из текущего поля ввода", то пошли в окно сначала сочетание Ctrl-A (выделить всё), потом Del. Но сработает только если поле ввода имеет фокус.
    Ответ написан
    Комментировать
  • Как считать время (кулдаун) для команды?

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

    Vindicar
    @Vindicar
    RTFM!
    Ответ написан
    Комментировать
  • Как работает запись переменных в память в Python?

    Vindicar
    @Vindicar
    RTFM!
    Если по аналогии, то любые переменные - это не более чем указатели на реальные объекты.
    И этими реальными объектами рулит garbage collector питона.
    Разница в том, что некоторые объекты изменяемые (точнее, объекты-ссылки), а некоторые нет (объекты-значения).
    Объекты-значения копируются при попытке модификации:
    a = 1
    b = a
    b += 2
    print(a, b) #1 3

    Объекты ссылки нет:
    a = [1]
    b = a
    b += [2]
    print(a, b) #[1, 2] [1, 2]
    Ответ написан
    Комментировать
  • Как правильно запустить Discord-бота в потоке?

    Vindicar
    @Vindicar
    RTFM!
    Я не в курсе как работает threadSignal.connect(), но я знаю, что bot.run() не вернёт управление, пока бот не завершит работу.
    Т.е. из функции BOT_RUN поток управления не вернётся ещё очень долго.
    Возможно, стоит перепланировать, какой поток что делает? Выделить отдельный поток под bot.run()?
    Ответ написан
    Комментировать
  • TypeError: solve() takes 0 positional arguments but 3 were given как исправить???

    Vindicar
    @Vindicar
    RTFM!
    Подумать головой. Какой именно solve() ты пытаешься вызвать?
    sols=solve([fx,fy],x,y)
    Из какого модуля? Потому что у тебя есть функция
    def solve():
    И программа уже видит только твою функцию.

    Поэтому
    1. переименуй свою функцию
    2. старайся не делать from xxx import *. Сплошная морока с таким подходом, как видишь. Лучше явно вызвать sympy.solve(). То же касается остальных модулей.
    Ответ написан
    2 комментария
  • Проблема с произведением музыки в discord.py?

    Vindicar
    @Vindicar
    RTFM!
    Ну подумай головой.
    > 'NoneType' object has no attribute 'play'
    > voice_channel.play(
    Значит, voice_channel - None.
    Смотрим откуда он взялся, читаем доки по Guild.voice_client:
    "voice_client - Returns the VoiceProtocol associated with this guild, if any.
    Type: Optional[VoiceProtocol]"
    Т.е. он вполне может быть None, и это надо проверять перед использованием.

    А вот более интересный вопрос, почему он None.
    Ты выше обращаешься к channel = ctx.author.voice.channel - а ведь не только voice может быть None, но и channel в нём. voice проверяешь, channel нет. А чуть ниже у тебя удивительная конструкция:
    try:
          await channel.connect()
        except:
          pass

    Дай угадаю, channel.connect() кидал 'NoneType' object has no attribute 'connect'?
    Никогда на надо глотать исключения таким образом - всё без разбора и без реакции.
    channel.connect() кидает ровно три возможных исключения, и их нужно обрабатывать по-нормальному!
    asyncio.TimeoutError – серверу икнулось, мы ничего сделать не можем, только попросить пользователя повторить по-позже.
    ClientException – мы уже к войс-чату подключены, нужно либо переключаться, либо просить подождать, пока закончим с первым запросом.
    OpusNotLoaded – библиотеку opus не загрузил, она нужна для работы с голосом.
    Ещё раз, except: pass - это очень, очень хороший способ выстрелить себе в ногу.

    И самое-то смешное, что в документации на connect() написано что оно возвращает готовый к работе voice_channel. Тогда вроде как не нужно было ctx.guild.voice_client трогать, connect() отдаст нужный объект.
    Ответ написан
    Комментировать
  • Почему не видно изменения переменной из процесса Python?

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

    Vindicar
    @Vindicar
    RTFM!
    Регулярные выражения (модуль re), частности маркер \b - граница слова.
    Регулярка "ворот" найдёт и "ворот", и "поворот", и "воротник"
    Регулярка "\bворот\b" найдёт только "ворот", но не "поворот" / "воротник".

    А вот если вам нужны словоформы ("летел/летаю/лечу/летим"), то задача усложняется.
    Ответ написан
    Комментировать
  • Определитель матрицы nxn Python?

    Vindicar
    @Vindicar
    RTFM!
    Где-то в расчётах получилось NaN - Not A Number.
    Могли поделить на ноль, больше я не вижу операций, которые могли NaN сгенерировать.
    Проверяйте значения матрицы по шагам, что тут ещё скажешь.
    Ответ написан
    Комментировать
  • Как прибавить +1 к значению в sqlite?

    Vindicar
    @Vindicar
    RTFM!
    > Сама ошибка - star = cursor.fetchone()[0]
    > TypeError: 'NoneType' object is not subscriptable

    not subscriptable означает что ты пытаешься взять индекс у объекта, который это не поддерживает. В твоем случае объект типа NoneType - т.е. None.
    Иными словами, cursor.fetchone() вернул None, и конечно у None нельзя взять индекс.
    Почему fetchone() вернул None? Потому что запрос SELECT не нашёл ни одной строки с подходящим значением photo!

    Как это решить?
    Вставить в таблицу строку с photo, а если не получится (так как такое photo уже есть), то обновить. Есть два способа.
    1. Кодом. Проверить, что вернул fetchone(). Если None, то делаем INSERT. Если не None, то UPDATE.
    2. Средствами БД, что обычно называется UPDATE/INSERT, или коротко UPSERT. Для sqlite это потребует примерно такого запроса:
    INSERT INTO stars (photo, star) VALUES (ид фото, 1) ON CONFLICT (photo) DO UPDATE SET star = star + 1

    Требование: столбец photo должен быть первичным ключом или хотя бы иметь уникальный индекс, иначе запрос просто будет добавлять дубликат строки.

    ВАЖНО
    f'SELECT star FROM stars WHERE photo = "{photo}"' - никогда так не делайте! Особенно если входные данные получены от пользователя. Это хороший способ заполучить SQL-инъекцию.
    Используйте placeholders, по порядку:
    cursor.execute('SELECT star FROM stars WHERE photo = ?', (photo, ) )
    или по именам
    cursor.execute('SELECT star FROM stars WHERE photo = :photo', {'photo' : photo} )
    И удобнее и безопаснее.
    Ответ написан
    7 комментариев
  • Как получить https редирект ссылку в запросе get?

    Vindicar
    @Vindicar
    RTFM!
    > переходя на которую происходит 5-ти секундная проверка
    Это означает, что редирект выполняется средствами JS, а не через коды ответа HTTP 3XX.
    requests умеет обрабатывать только последний вариант, так как она не эмулирует браузер целиком.
    Теоретически правильную ссылку можно выцарапать из содержимого скачанной страницы, но на практике не факт - скорее всего, страницу с проверкой ввели как раз для защиты от скриптов типа твоего.
    Можешь поиграться с пакетом selenium, он позволяет притворяться полноценным браузером - вдруг получится.
    Ответ написан
    2 комментария
  • Json представление класса при передаче в метод Python?

    Vindicar
    @Vindicar
    RTFM!
    Гораздо лучше явно добавить метод to_json() в ваш класс, и явно вызывать его.
    Это будет гораздо проще в реализации и понимании.

    __str__() предназначен для человекочитаемого представления, а __repr__(), в идеале, для строкового представления, которое можно eval'нуть обратно в объект.
    Под сериализацию в json они подходят плохо.
    Ответ написан
    Комментировать
  • Какие параметры есть у файла python кроме -i?

    Vindicar
    @Vindicar
    RTFM!
    python /? под Windows
    python --help под Linux
    И читайте внимательно.
    А вообще, вопрос для гугла.
    Ответ написан
    1 комментарий
  • Как написать input для дискорд бота?

    Vindicar
    @Vindicar
    RTFM!
    Простой вариант - параметры команды. Иными словами, задаёшь все исходные данные для выполнения команды в одном начальном сообщении.
    Например,
    > Ты: !скажи 3 Привет
    < Бот: Привет
    < Бот: Привет
    < Бот: Привет
    Если ты используешь discord.py, то она предоставляет очень удобный механизм для таких вещей. Он подробно описан в документации.

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

    Vindicar
    @Vindicar
    RTFM!
    Вообще в питоне принята динамическая типизация - иными словами, если класс имеет нужные свойства и методы, то неважно какой это класс на самом деле.

    Но если позарез нужно, то есть способы.

    1. Динамическая проверка класса при выполнении
    isinstance(x, list) проверит, что объект является списком или наследуется от списка.
    isinstance(x, (list, tuple)) сделает то же для пары возможных классов
    Я бы не рекомендовал такой подход, так как проверка выполняется каждый раз при выполнении, даже если её результат заведомо известен. Кроме того, нередки ситуации, когда метод обозначен как "ожидает список", но при этом всё что делает со списком - перебирает элементы. Т.е. на деле любая коллекция сработала бы.

    2. Статическая проверка (погугли про python type hints)
    Переписываешь заголовок метода так:
    from typing import Optional
    class Math:
        def __init__(self, first: Int, second: Optional[Int] = None):

    Если потом передать в конструктор неверные типы, сам интерпретатор питона проигнорирует это и выполнит скрипт как обычно. Но есть отдельная утилита mypy, которая статически (без запуска скрипта) анализирует скрипт и проверяет, что ты передаёшь в тот или иной метод, и выдаст ошибку если тип неверный. Таким образом можно статически убедиться в корректности скрипта, не теряя производительность во время выполнения.

    3. Протоколы
    Это развитие предыдущего подхода, подобие интерфейсов в других ООП языках. Они также используются совместно с mypy, интерпретатор питона их игнорирует.
    Ответ написан
    Комментировать