Задать вопрос
Ответы пользователя по тегу Python
  • Помгите я сделал команду clear и мне нужно чтобы могли её использовать люди с определёным правом?

    Vindicar
    @Vindicar
    RTFM!
    Читай документацию на has_permissions.
    The permissions passed in must be exactly like the properties shown under discord.Permissions.

    Т.е. запрашиваемые разрешения должны писаться именно так, как перечислено по ссылке. Сравниваем:
    У тебя: manage_message
    По ссылке: manage_messages
    Ответ написан
    Комментировать
  • Как упаковать список в список в Python?

    Vindicar
    @Vindicar
    RTFM!
    1. формируешь список для данного элемента
    itemlist = [name_product, price, quantity, amount]
    2. закидываешь в этот список в общий
    information_products.append(itemlist)

    Удивлён, что это вызвало затрудения.
    Ответ написан
  • Как получить переменную из процесса threading в запросе flask?

    Vindicar
    @Vindicar
    RTFM!
    Потому что в ходе присваивания в name() ты создаешь локальную переменную a, которая перекрывает глобальную.
    Есть два решения:
    1. Простое: вставить в начало name() строку global a, чтобы работать с глобальной переменной
    2. Правильное: обернуть поток в класс, и работать с его экземплярной переменной вместо глобальной.

    К слову, при запуске потока добавь daemon=True, иначе твой поток не даст завершить работу сервера (он же while True).
    Ответ написан
    Комментировать
  • Как сделать два парсера?

    Vindicar
    @Vindicar
    RTFM!
    А переиспользовать один и тот же driver нельзя?
    Ответ написан
    Комментировать
  • Что не так с кодом?Не работает бот?

    Vindicar
    @Vindicar
    RTFM!
    1. Оформляй код как положено, кнопкой </>
    2. Тебе бот прямо говорит в чём дело:
    FileNotFoundError: [Errno 2] No such file or directory: 'static/welcome.webp'
    Ему в текущей рабочей директории нужна поддиректория static, и в ней файл welcome.webp
    Если файл есть, проверь, нет ли опечаток в имени.
    Также обрати внимание, что путь к файлу относительный, а потому зависит от текущей рабочей директории. Поменяй путь на абсолютный, или вычисляй этот путь относительно пути к исполняемому файлу бота.
    Ответ написан
    2 комментария
  • Как получить из трехмерного массива numpy строки совпадающие с указанной?

    Vindicar
    @Vindicar
    RTFM!
    (a == [2,0,2]).all(axis=2)
    a == [2,0,2] даст тебе трёхмерный массив булевых значений - результат поэлементного сравнения, при этом сравнение будет идти по последнему измерению.
    all(axis=2) сгруппирует этот массив по третьему измерению, при этом группа будет истинной, только если все значения в группе истинны. Т.е. только если в этой строке все значения совпали.
    >>> a = np.array([[[1, 0, 0], [2, 0, 1], [2, 0, 2]], [[0, 0, 0], [2, 0, 3], [0, 0, 0]]])
    >>> a == [2,0,2]
    array([[[False,  True, False],
            [ True,  True, False],
            [ True,  True,  True]],
    
           [[False,  True, False],
            [ True,  True, False],
            [False,  True, False]]])
    >>> (a == [2,0,2]).all(axis=2)
    array([[False, False,  True],
           [False, False, False]])
    Ответ написан
    1 комментарий
  • Как убрать пробел в строке print в Питон?

    Vindicar
    @Vindicar
    RTFM!
    А если нужно именно убрать вставку пробела между выводимыми значениями, то делаешь так:
    print('Привет,', name, '!', sep='')
    При этом sep может быть любой строкой, например:
    print('Привет,', name, '!', sep='::')
    выведет "Привет,::Вася::!"

    Аналогично есть параметр end, который указывает, что print() выведет после всех значений. По умолчанию это "\n" - переход на следующую строку, но можно указать end='', и тогда курсор останется на той же строке.
    Ответ написан
    Комментировать
  • Как правильно реализовать ввод данных?

    Vindicar
    @Vindicar
    RTFM!
    Ну во-первых, что именно ты пытаешься сделать?
    > firstnames = input("Введите ваше имя")
    Ты присваиваешь введённое пользователем значение локальной переменной метода input_info() (точнее, его параметру). Питон не предусматривает передачу параметров по ссылке, так что это присвоенное значение никогда выйдет за пределы метода, и будет потеряно, когда метод завершится.
    Далее, зачем while True + break? Чем не устроил простой return?
    Наконец, я бы не стал вносить такие методы в тело класса. Пусть основная программа разбирается с вводом/выводом так, как ей этого хочется, класс, хранящий данные, этим заниматься не обязан.
    class Umar():
        def __init__(self, firstname, lastname, patronymic, age, birthday, jobs, car):
            ... # тут код инициализации класса
    #эти функции можно сделать методами класса, 
    # но я бы рекомендовал оставить их вне класса,
    # так как способы ввода/вывода варьируются чаще, 
    # чем способы хранения данных.
    # красивый вывод содержимого класса
    def pretty_print_umar(u: Umar):
        print('Имя:', u.firstname)
        ... # ну и так далее
    # ввод данных с клавиатуры и создание по ним экземпляра класса
    def input_umar() -> Umar:
        firstname = input('Введите имя [Enter - отмена]:')
        if not firstname:
            return
        # и так далее для остальных полей, а затем
        return Umar(firstname, ...)
    Ответ написан
  • Почему не работают две одинаковые команды в разных группах?

    Vindicar
    @Vindicar
    RTFM!
    Дай угадаю, работает только первый или только второй метод, и если поменять их местами, начинает работать другой?
    Переименуй один из методов balance, ты же всё равно указываешь параметр name в декораторе.
    Ответ написан
    1 комментарий
  • Как расположить несколько текстов в разных местах в label в tkinter?

    Vindicar
    @Vindicar
    RTFM!
    Используй несколько label'ов или рисуй текст сам на canvas'е.
    Ответ написан
  • В чём ошибка кода?

    Vindicar
    @Vindicar
    RTFM!
    Прошу прощения, мой предыдущий ответ был неверен.
    Похоже, Дискорд больше не позволяет неофициальным клиентам присоединяться к серверам.
    См. issue #888 на github'е discord.py.
    Ответ написан
  • Как решить эту задачу?

    Vindicar
    @Vindicar
    RTFM!
    По-моему, нет нужды проверять, простой ли делитель. Смотри, мы проверяем делители от 2 до sqrt(N).
    Это значит, что если у числа есть составной делитель, то мы сначала наткнёмся на делители этого составного делителя. Тогда мы можем их устранить простым алгоритмом.
    Обрати внимание, делители храним не в списке, а в множестве (set), чтобы избежать двойных включений.
    1. Берём проверяемое число N, создаём пустой набор делителей. Принимаем последний множитель K = 2.
    2. Пока N > 1:
    3.    Цикл по i от K до корня из N
    4.        Если N делится на i, то i - делитель. Тогда
    5.            Принимаем K = i, делим N нацело на i, добавляем i в набор найденных делителей, прерываем цикл 3.
    6.    Если цикл 3. не был прерван, то текущее N - простое. Добавляем N в набор делителей, прерываем цикл 2.
    7. Возвращаем построенный набор делителей.

    Таким образом мы постепенно "устраняем" простые делители, от меньших к большим, пока число само не станет простым.
    А дальше просто, в цикле от 10001 до 50001 выполняем алгоритм выше.

    Также можно оптимизировать программу, заставив цикл 3 перебирать не все числа до корня из N, а заранее вычисленный список простых чисел до заданного максимального N. Но и без этого работает быстро.
    Ответ написан
    Комментировать
  • Как присоединиться к Discord серверу?

    Vindicar
    @Vindicar
    RTFM!
    Именно бота (т.е. программу, работающую с учёткой бота) - нельзя.
    А вот клиент-бота (т.е. программу, работающую из-под учётки клиента) - можно.
    Смотри метод Client.fetch_invite(). Но такие программы идут против ToS Discord, так что если поймают - могут и забанить.
    Ответ написан
    1 комментарий
  • Посчитать нечетные цифры числа методом рекурсии?

    Vindicar
    @Vindicar
    RTFM!
    #even и odd - счётчики чётных/нечётных цифр, при первом вызове должны быть 0
    def recursive_counter(number, even = 0, odd = 0):
      #проверяем, не пора ли остановить рекурсию:
      if number <= 0: #дошли до нуля - пора. Кроме того, с отриц. числами будут проблемы.
        return even, odd #возвращаем кортеж значений
      #отрезаем от числа последнюю цифру делением на 10.
      #divmod() - встроенная функция питона
      reduced_number, last_digit = divmod(number, 10)
      if last_digit % 2 == 0: #последняя цифра чётная
        #значит, на одну больше чётную цифру
        return recursive_counter(reduced_number, even+1, odd) #уходим в рекурсию
      else: #последняя цифра нечётная
        #значит, на одну больше нечётную цифру
        return recursive_counter(reduced_number, even, odd+1) #уходим в рекурсию
    
    N = 1234567890
    even, odd =  recursive_counter(N) #распаковываем кортеж, который вернула функция
    print(f'В числе {N} есть {even} чётных цифр и {odd} нечётных.')
    Ответ написан
    Комментировать
  • Python: Как вызвать асинхронную функцию из синхронной при действующем event loop?

    Vindicar
    @Vindicar
    RTFM!
    Заверни асинхронный коллбэк в синхронную обёртку (можно лямбду), которая вызывает asyncio.create_task() для целевой корутины, и передавай эту обёртку как коллбэк.
    Если же ты контролируешь func2, то ещё проще, вставь вызов create_task() туда.
    Вот если нужно дождаться результата выполнения, то будет сложнее - но можно засунуть обработку результата в асинхронную часть.
    Ответ написан
    3 комментария
  • Как запустить функцию как subprocess?

    Vindicar
    @Vindicar
    RTFM!
    subprocess запускает команду, как будто ты её в терминале набрал.
    Чтобы запустить в параллельном процессе функцию питон-кода, используй multiprocessing.
    Если будешь пользоваться мультипроцессингом, заверни тело своей программы (т.е. непосредственно выполняемые команды, а не объявления функций или классов) в идиому
    if __name__ == '__main__':
    Иначе у тебя дочерние процессы будут пытаться запустить свои дочерние процессы, вместо того чтобы делать что велено.
    Ответ написан
  • Как сделать чс пользователей, которые не смогут использовать команду discord py?

    Vindicar
    @Vindicar
    RTFM!
    Хранишь в базе или в каком ином хранилище список забанненых и проверяешь ID отправителя на вхождение.
    discord.py позволяет указать фильтр при регистрации команды, чтобы не писать проверку руками в каждой команде.
    Вместо файла/БД можно просто создать роль типа "доступ к боту запрещён" и проверять пользователя на наличие этой роли. Так может быть проще.
    Ответ написан
    Комментировать
  • Ошибка Command raised an exception: AttributeError: 'File' object has no attribute 'startswith' что делать?

    Vindicar
    @Vindicar
    RTFM!
    В доках написано:
    banner (bytes) – A bytes-like object representing the banner. Could be None to denote removal of the banner.

    Т.е. как я понял, нужно отдавать не файл, а массив байт (встроенный тип данных bytes или подобие), который содержит данные из желаемого файла.
    Попробуй открыть искомый файл как обычно через open() в режиме 'rb', сделать read(), а потом результат отдать как banner.
    Ответ написан
    Комментировать
  • Ограничение ввода данных в переменную?

    Vindicar
    @Vindicar
    RTFM!
    number1 = message.text.split()[1] #вытащили нужный кусок строки
    try:
      number_value = int(number1) #int() выбросит исключение ValueError, если строка не является записью числа
      if  not (0 < number_value <= 1000):
        raise ValueError() #мы сами выкинем ValueError, если число недопустимое
    except ValueError: 
      await message.answer('введите число от 1 до 1000') #ругаем пользователя
      return #завершаем обработку команды
    #если управление дошло досюда, число number_value допустимое.
    Ответ написан
    Комментировать
  • Как отправить сообщение всем людям на сервере в лс discord.py?

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

    А вообще за такое я бы бота выкинул нафиг со своего сервера.
    Ответ написан
    1 комментарий