Задать вопрос
Ответы пользователя по тегу Python
  • Как отправить сообщение всем людям на сервере в лс discord.py?

    Vindicar
    @Vindicar
    RTFM!
    Права на это боту даны? Intent'ы соответствующие запрошены?

    А вообще за такое я бы бота выкинул нафиг со своего сервера.
    Ответ написан
    1 комментарий
  • При выводе изображения по CSV появляется ошибка. Что не так в моем коде?

    Vindicar
    @Vindicar
    RTFM!
    img = cv2.imread('data/first/{}'.format(img_name))
    mask = cv2.imread('data/mas/{}'.format(img_name))

    Во-первых, стоит указать вторым параметром cv2.IMREAD_COLOR.
    Во-вторых, проверь, что в итоге в img и mask.
    В случае ошибки imread() молча возвращает None, а не кидает исключение.
    Ответ написан
    3 комментария
  • Как получить информацию из объекта класса через словарь?

    Vindicar
    @Vindicar
    RTFM!
    Я бы посоветовал убрать print() из класса.
    Пусть ваш класс возвращает объект Student по запросу, а вызывающий код уже решает что с ним делать - печатать, брать отдельные поля, изменять...
    Ответ написан
    Комментировать
  • Условные конструкции от НЕ?

    Vindicar
    @Vindicar
    RTFM!
    Может, совпадение. Особых причин для этого нету.
    Ответ написан
    Комментировать
  • Как при помощью кода 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 комментария