• Как получить переменную из процесса 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 комментарий
  • Имеется ли возможность в openssl сохранить сигнатуру в файле, который подписали?

    Vindicar
    @Vindicar
    RTFM!
    Боюсь, это проблематично, так как после добавления сигнатуры файл изменится, и подпись станет невалидной. И даже если мы выкусим подпись перед проверкой (а не факт, что мы сходу поймём где подпись!), то мелочи вроде лишнего перевода строки всё равно могут помешать нам восстановить исходный вид файла.
    Ответ написан
  • Как сделать так, чтобы команды автоматически добавлялись в help?

    Vindicar
    @Vindicar
    RTFM!
    Ну во-первых, если ты пропишешь docstring у функции, реализующей команду, то этот docstring будет использован в качестве справки. При этом все команды в отдельном Cog-классе уже будут сгруппированы вместе.
    Во-вторых, у декоратора @bot.command() есть параметр help - если я верно понял, он позволяет задать описание команды явно, вместо ииспользования docstring.
    Ответ написан
  • Как расположить несколько текстов в разных местах в 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 js?

    Vindicar
    @Vindicar
    RTFM!
    Проверка на вменяемость: соответствующие интенты и права у бота есть?

    Причем интенты должны как запрашиваться кодом, так и быть включены в панели разработчика бота.
    Ответ написан
  • Как присоединиться к 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 допустимое.
    Ответ написан
    Комментировать