Задать вопрос
  • Что не так у меня в коде? Мне в терминале выводит большую ошибку.?

    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, можно попробовать сделать это программно. Но успешность будет зависеть от настроек и модели роутера.
    Ответ написан
    Комментировать
  • Как сделать анимацию загрузки при условии на python tkinter?

    Vindicar
    @Vindicar
    RTFM!
    1. Подумать.
    2. Сделать.

    А если серьёзно, вынеси загрузку в отдельный поток, в идеале - обёрнутый в класс. Поток НЕ ДОЛЖЕН обращаться напрямую к элементам интерфейса - только к полям своего класса.
    По нажатию кнопки запускай этот поток. Только запуск, без ожидания.

    Чтобы обнаружить завершение, после запуска потока сделай цикл с помощью window.after(). Подробности в доках, но если кратко, метод after() позволяет вызвать функцию в потоке GUI спустя некоторое время. При этом функция может снова запланировать свой вызов через after(), тем самым создавая как-бы цикл. Если не запланируешь новый вызов - цикл прервётся.
    Соответственно, идея в том, что эта функция будет проверять, не закончил ли поток работу (например, читать какое-нибудь логическое значение). Если закончил - она будет вправе обратиться к элементам GUI, чтобы вывести результат. Если не закончил - она снова запланирует свой вызов через after(), скажем, через 200 миллисекунд.

    Ну и да - исключения, чёрт побери! Обрабатывай исключения!
    Ответ написан
    2 комментария
  • Как организовать сравнение даты в переменной с форматом эталона?

    Vindicar
    @Vindicar
    RTFM!
    Документацию читать пробовал?
    ValueError is raised if the date_string and format can’t be parsed by time.strptime() or if it returns a value which isn’t a time tuple

    Если входная строка или строка формата не поддаются разбору вызовом time.strptime(), или если эта функция возвращает не кортеж с описанием даты-времени, функция выбрасывает исключение ValueError.

    Учись обрабатывать исключения блоком try-except.
    Впрочем, если судить вот по этому:
    if res == True:
        ...
    elif res == False:
        ...

    Стоит вообще поучить язык, а потом уже браться за ботов. Это технически сработает, но выдаёт непонимание того, как работают логические переменные.
    Правильнее будет
    if res:
        ...
    else:
        ...


    Также задачу соответствия текста шаблону часто удобнее решать регулярными выражениями. Например:
    import datetime
    import re
    # цифра, за ней может быть ещё одна, за ними "-", "/" или ".", 
    # потом опять цифра, за ней может быть ещё одна, за ними "-", "/" или ".", 
    # потом 2 или 4 цифры
    regexp = re.compile(r'(\d\d?)[-/.](\d\d?)[-/.](\d{2}|\d{4})')
    text = input('Введите дату в формате DD/MM/YYYY: ')
    match = regexp.search(text)
    if match is None:
        print('Вы ввели не дату, или ввели её в неправильном формате')
    else:
        day, month, year = int(regexp.group(1)), int(regexp.group(2)), int(regexp.group(3))
        # тут нужна ещё проверка, так как пользователь может ввести 99/99/9999
        try:
            userdate = datetime.date(year, month, day)
        except ValueError:
            print('Это некорректная дата.')
        else:
            print('Дата корректна.')
    Ответ написан
  • Как записать Input в TelegramBotApi?

    Vindicar
    @Vindicar
    RTFM!
    А теперь еще раз и по-человечески.
    Ты хочешь, чтобы сообщения пользователя интерпретировались по-разному, в зависимости от того, на каком шаге сценария он находится?
    Тебе нужны finite state machine (FSM). Не уверен, что PyTelegramBotAPI их умеет - смотри документацию на него.
    Ответ написан
  • Sqlite - как добавить текст в ячейку бд, если в нем могут содержаться и одинарные, и двойные кавычки?

    Vindicar
    @Vindicar
    RTFM!
    А всего-то нужно прочитать документацию. Там этот случай описан, и показано, как делать правильно.
    con = sqlite3.connect(":memory:")
    cur = con.execute("CREATE TABLE lang(name, first_appeared)")
    
    # This is the named style used with executemany():
    data = (
        {"name": "C", "year": 1972},
        {"name": "Fortran", "year": 1957},
        {"name": "Python", "year": 1991},
        {"name": "Go", "year": 2009},
    )
    cur.executemany("INSERT INTO lang VALUES(:name, :year)", data)
    
    # This is the qmark style used in a SELECT query:
    params = (1972,)
    cur.execute("SELECT * FROM lang WHERE first_appeared = ?", params)
    print(cur.fetchall())
    Ответ написан
    5 комментариев
  • Как запустить двух ботов одновременно?

    Vindicar
    @Vindicar
    RTFM!
    Простого способа нет.
    Если оба бота написаны на базе asyncio, то скорее всего их метод run_forever() или эквивалент сводится к вызову asyncio.run(корутина_тело_бота()). Тогда можно будет свести запуск бота к тайой конструкции
    async def main():
        await asyncio.gather(
            корутина_тело_бота1(),
            корутина_тело_бота2()
        )
    
    if __name__ == '__main__':
        asyncio.run(main())

    Программа завершится, когда завершатся оба бота.
    Но чтобы добраться до "настоящего" тела бота, нужно как минимум зарыться в документацию, а то и почитать исходники библиотеки, в частности, исходники run_forever() (или его аналога).
    Не получится просто взять и написать
    async def bot1():
        bot1.run_forever()

    Чудес не бывает.

    Есть вариант запустить ботов в разных потоках, и это единственный вариант, если хотя бы один из ботов не асинхронный. Но я бы не советовал. Многопоточные программы имеют целую кучу своих специфических багов, которые могут проявляться не при каждом запуске. Они очень неприятны в отладке.
    А уж мешать многопоточность с асинхронностью... тут нужно очень хорошо понимать, как это всё работает.
    Ответ написан
    Комментировать
  • Некорректная работа sqlite. Работа с параметрами. Что мне делать?

    Vindicar
    @Vindicar
    RTFM!
    Во-первых, проверить структуру таблицы eBase, какие столбцы там есть.
    Во-вторых, никогда не использовать форматирование строк для составление запросов.
    Для этой цели есть parametrized queries.
    Ответ написан
    5 комментариев
  • Как обработать ошибку UnicodeDecodeError и при этом продолжить чтение файла?

    Vindicar
    @Vindicar
    RTFM!
    Альтернативное решение - использовать не обёртку for ... in file, а использовать цикл while и вызывать file.readline() вручную.
    Ответ написан
    Комментировать
  • Как посмотреть тело функции в python?

    Vindicar
    @Vindicar
    RTFM!
    Для встроенных функций не получится. Они не на Питоне реализованы. Читай исходники, как посоветовал Влад Григорьев .
    Ответ написан
    Комментировать