Задать вопрос
  • Как получить id bios в python?

    Vindicar
    @Vindicar
    RTFM!
    Такого значения нет. Имей ввиду, что:
    - любая привязка к железу обламывает тех, кто сделает апгрейд
    - многие железные идентификаторы поддаются изменению
    - программу на питоне тривиально отредактировать, чтобы оторвать нафиг эту проверку

    Если тебе нужна защита от копирования, посмотри в сторону pyarmor. Но имей ввиду, pyarmor тоже отрывается при желании.
    Ответ написан
  • Как отобразить работу скрипта Python запущенного через systemctl?

    Vindicar
    @Vindicar
    RTFM!
    ОП, ты хочешь странного. Осознай, что демоны (а systemd управляет как раз программами типа daemon) по определению не предназначены для взаимодействия непосредственно с пользователем, в частности через терминал. А значит, у тебя два выхода:

    1. Перестать хотеть странного, и реализовать нормальные логи и анализировать их. Тогда можно будет в любой момент посмотреть историю, выведенную в лог.
    При необходимости отслеживать файл лога в реальном времени можно использовать команду tail -f файл.log. Почитай про неё.
    Также можно натравить на лог какую-нибудь утилиту мониторинга, которая будет его читать и посылать тебе оповещения о событиях по другому каналу.
    Если лог большой, есть logrotate.
    Минус - специфические терминальные фишки в логе работать не будут. Скажем, прогрессбар там не сделаешь, и ввести текст не получится.

    2. Отказаться от запуска программы как классического демона, и запускать её через утилиту screen. Тогда ты сможешь сконнектиться к сессии screen когда угодно.
    Плюс - взаимодействие с терминалом как обычно. В том числе из разных ssh сессий.
    Минус - screen не самая удобная штука, сочетания клавиш там мозголомные. Плюс всё равно запуск screen придётся заворачивать в systemd если тебе нужен автозапуск и автоперезапуск.
    Ответ написан
    4 комментария
  • Почему не работает код?

    Vindicar
    @Vindicar
    RTFM!
    В твоём коде показано, как определить класс объекта. Смотри, как формируется prediction_text.
    А дальше просто. Храни в глобальной переменной время, когда был сохранён последний снимок объекта с желаемым классом.
    Если у тебя на текущем кадре есть объект с желаемым классом, проверь текущее время. Если прошло 30 секунд с последнего сохранения - сохрани новый снимок, и обнови время последнего сохранения на текущее.
    Ответ написан
    Комментировать
  • Как сменить директорию (Ubuntu) на хостинге beget?

    Vindicar
    @Vindicar
    RTFM!
    Ты используешь относительный путь, т.е. путь относительно текущего рабочего каталога.
    Ты уверен, что каталог существует, и существует именно там где ты ищешь?
    Например, если ты находишься в каталоге /home/root, и делаешь cd ../folder/folder2, ты будешь пытаться перейти в каталог /home/folder/folder2.
    Ответ написан
    1 комментарий
  • Как разобрать mp3 файл?

    Vindicar
    @Vindicar
    RTFM!
    mp3 вряд ли выйдет. Там слишком много частот.
    Попробуй сначала midi.
    Ответ написан
    Комментировать
  • Как решить проблему?

    Vindicar
    @Vindicar
    RTFM!
    Входной файл, который ты грузишь вызовом users = json.load(f) записан не в кодировке utf-8. или переделай его, чтобы был в utf-8, или выясни его кодировку и укажи её при открытии файла.
    Ответ написан
  • Пишу код для счастливых билетов, но в коде что-то не то и циклы не работают после 000000, в чём проблема?

    Vindicar
    @Vindicar
    RTFM!
    Во-первых, у тебя уехали циклы, начиная с о второй цифры. Они не внутри общего цикла.
    Далее, ты можешь заменить 6 циклов на один, просто по числам от 0 до 999999.
    for number in range(0, 1_000_000):
        str_number = f'{number:0>6}' # превращаем число в строку, добивая нулями слева до 6 знаков
        digits = list(map(int, str_number))  # каждый символ строки превращаем в отдельное число, т.е. цифру
        d1, d2, d3, d4, d5, d6 = digits  # распаковываем список цифр в отдельные переменные


    Ещё ты можешь перебирать первые 5 цифр, а шестую цифру вычислять - сумма первых трёх минус четвёртая и минус пятая . Если результат в диапазоне 0-9, то это и будет шестая цифра.

    Если же ты предпочтёшь перебирать 5 цифр отдельными циклами, то стоит делать иначе.
    Первые 3 цифры перебираешь полным циклом, 4я цифра не должна превышать сумму первых 3х, 5я цифра не должна превышать сумму первых 3х - 4ю цифру. 6ю цифру вычислишь.
    for d1 in range(10):
        for d2 in range(10):
            for d3 in range(10):
                for d4 in range(min(9, d1+d2+d3) + 1):
                    for d5 in range(min(9, d1 + d2 + d3 - d4) + 1):
                        d6 = d1 + d2 + d3 - d4 - d5
                        if 0 <= d6 <= 9:
                            print(f'{d1}{d2}{d3}{d4}{d5}{d6}')


    Аналогично, можно заметить, что не всегда имеет смысл перебирать 4-5 цифры с нуля. Пример: если первые три цифры 299, то четвёртая не может быть 0 или 1 - в этом случае оставшиеся две цифры должны будут дать в сумме 20 или 19, что невозможно. С учётом код изменится так:
    for d1 in range(10):
        for d2 in range(10):
            for d3 in range(10):
                min_d4 = max(0, d1 + d2 + d3 - 18)
                max_d4 = min(9, d1 + d2 + d3)
                for d4 in range(min_d4, max_d4 + 1):
                    min_d5 = max(0, d1 + d2 + d3 - d4 - 9)
                    max_d5 = min(9, d1 + d2 + d3 - d4)
                    for d5 in range(min_d5, max_d5 + 1):
                        d6 = d1 + d2 + d3 - d4 - d5
                        if 0 <= d6 <= 9:
                            print(f'{d1}{d2}{d3}{d4}{d5}{d6}')
    Ответ написан
    Комментировать
  • Почему код не работает так как должен?

    Vindicar
    @Vindicar
    RTFM!
    Ну для начала, разность двух datetime даёт объект timedelta.
    И в доках написано так:
    Only days, seconds and microseconds are stored internally. Arguments are converted to those units:
    A millisecond is converted to 1000 microseconds.
    A minute is converted to 60 seconds.
    An hour is converted to 3600 seconds.
    A week is converted to 7 days.

    Т.е. timedelta(days=1).seconds даст 0, так как это 1 день и 0 секунд.

    Выхода два.
    1. Построй объект timedelta, описывающий таймаут операции, и сравнивай с ним напрямую.
    timeout = datettime.timedelta(days=1)
    if (datetime.datetime.now() - last_command_use_time) > timeout:
        ...

    2. Используй метод total_seconds()
    timeout = datettime.timedelta(days=1)
    if (datetime.datetime.now() - last_command_use_time).total_seconds() > 24*60*60:
        ...
    Ответ написан
    Комментировать
  • Что не так у меня в коде? Мне в терминале выводит большую ошибку.?

    Vindicar
    @Vindicar
    RTFM!
    Ну так читай внимательно текст ошибки.
    _tkinter.TclError: bad option "-tittle": must be -default, -detail, -icon, -message, -parent, -title, or -type

    Разницу видишь?
    А ошибка в строке
    File "c:\Users\Solo\Desktop\MAXIUMAM2035\Go_user.py", line 19, in button_click
    messagebox.showinfo(tittle='Проверка', message=info_str) # Для вывода информации
                        ^^^^^^
    Ответ написан
    1 комментарий
  • Не видит библиотеку discord, как исправить?

    Vindicar
    @Vindicar
    RTFM!
    1. Не прикреплять код скриншотом. Правила принял не читая?
    2. У тебя в проекте вижу папку виртуального окружения venv. Куда библиотека поставлена: в venv, в системный интерпретатор, в системный но с наследованием в venv? Разберись, что такое виртуальное окружение и как оно работает.
    Ответ написан
    Комментировать
  • Почему с отрицательным кол-во хп персонаж жив?

    Vindicar
    @Vindicar
    RTFM!
    1. Включи логику. Ты сначала проверяешь, умер ли персонаж, а потом наносишь урон. Отсюда и наблюдаемое поведение.
    2. Никогда не используй f-строки для SQL запросов, освой parametrized queries.
    Ответ написан
    Комментировать
  • Почему не работает meber_join disnake?

    Vindicar
    @Vindicar
    RTFM!
    Разберись уже, как работает utils.get().
    Она принимает коллекцию объектов, и набор атрибутов в виде kwargs.
    Возвращает первый объект в этой коллекции, у которого атрибуты совпадают с заданными.
    Т.е. тебе надо туда передать список ролей сервера и атрибут id.
    Ну или использовать другой метод, например, member.guild.get_role().

    Читай документацию, короче.
    Ответ написан
    Комментировать
  • Как сделать рандом в дискорде?

    Vindicar
    @Vindicar
    RTFM!
    Изучай стандартную библиотеку языка, в частности, модуль random.
    Ответ написан
    Комментировать
  • IndentationError: unexpected unindent, что делать?

    Vindicar
    @Vindicar
    RTFM!
    Почему ты открыл try, но не закрыл его блоком except или finally?
    Сначала учи язык, потом уже клепай ботов.
    Ответ написан
    Комментировать
  • Как сделать список в операторе?

    Vindicar
    @Vindicar
    RTFM!
    Либо как это сделал soremix , либо вот так, однострочником:
    if any(word in text for word in list_hello):
        print('Oi!')

    Но и тут много подводных камней. "превед" такой подход не опознает, а вот на "нехай" сработает.
    Ответ написан
    Комментировать
  • Хостинг телеграм бота с базой данных SQLite3, как?

    Vindicar
    @Vindicar
    RTFM!
    Расширю ответ выше для случая, если VPS под линуксом:
    0. Добавь журналирование действий в бота, это упростит отладку потом.
    1. Арендуешь VPS.
    2. Получаешь доступ по SSH.
    3. Проверяешь, какая версия питона установлена по умолчанию.
    4. Если требуется, устанавливаешь предпочительную версию питона. По возможности используй пакетный менеджер.
    5. Создаёшь каталог для своего бота. Под никсами обычно это каталог внутри /opt.
    6. Создаёшь в каталоге виртуальное окружение через venv.
    7. Активируешь это окружение и ставишь в него нужные боту пакеты через pip. Это предпочтительнее, чем ставить пакеты прямо в системное окружение.
    8. Загружаешь в каталог бота. Либо прямо с машины, используя scp, либо загрузив его куда-то ещё, и скачав через wget. Есть ещё вариант с загрузкой бота на гитхаб, но тут надо быть осторожным и не запалить токен бота и другую секретную инфу.
    9. Проверяешь, что бот работает. Рекомендуется не запускать бота из-под root. Создай новую учётную запись, и сделай chown на все файлы бота, чтобы они принадлежали этой учётке.
    10. Формулируешь и записываешь команду, которая позволит запустить бота через желаемое виртуальное окружение от имени правильной учётной записи.
    11. Разбираешься, как том дистрибутиве, под которым работает VPS, настроить автозапуск. Скорее всего это systemd, но может быть и просто скрипт в /etc/init.d или ещё что. Прописываешь автозапуск бота, например, через systemd модуль.
    12. Убеждаешься, что бот заводится через автозапуск.
    13. PROFIT.
    Ответ написан
    Комментировать
  • Как настроить нейронную сеть на python?

    Vindicar
    @Vindicar
    RTFM!
    Почему ты делаешь np.mean(result)?
    Если я верно помню, softmax-слой даст наибольший отклик в элементе, соответствующем выбранному классу. Т.е. нужно сделать argmax по этому слою, чтобы узнать ответ сети.

    P.S.: обалдеть, я и не знал что в питоне есть оператор @.
    Ответ написан
  • Как в notepad++ настроить табуляцию на новую строку?

    Vindicar
    @Vindicar
    RTFM!
    Встроенный Notepad так не умеет.
    Посмотри в сторону Notepad++ - он шустрый как Блокнот, но куда более продвинутый.

    Попробуй поставь плагин Indent By Fold. Он есть во встроенном списке плагинов.
    Ответ написан
  • Почему тип dict не изолируется внутри класса?

    Vindicar
    @Vindicar
    RTFM!
    class Interface:
        a = 1
        b = dict()
        c = []

    Ты описал класс с тремя атрибутами класса. Не экземпляра, а именно класса.
    Три атрибута экземпляра описываются как
    class Interface:
        def __init__(self):
            self.a = 1
            self.b = dict()
            self.c = []

    А если тебе нужен эквивалент интерфейсов, почитай про typing.Protocol.
    Ответ написан
    Комментировать
  • Как переадресовать локальный порт на внешний IP с помощью Python?

    Vindicar
    @Vindicar
    RTFM!
    Настрой роутер. Если роутер поддерживает UPnP, можно попробовать сделать это программно. Но успешность будет зависеть от настроек и модели роутера.
    Ответ написан
    Комментировать