Задать вопрос
Ответы пользователя по тегу Python
  • Можете помочь с Telegram ботом?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Где-то лишний/пропущенный отступ, либо где-то затесался таб, вместо пробела (или наоборот).
    Т.к. полный текст ошибки вы не привели - ищите нужную строку сами.
    Ну и да - подобный подход - неверен.

    try:
       ...
    except Exception as e:

    Чисто с точки зрения синтаксиса все ок, но "хорошим тоном" - является использование не общего исключения, а максимально конкретного, а базовое использовать "по остаточному принципу" (сперва конкретные, потом, если возможны какие-то другие, но специфической обработки не нужно - базовое)
    try:
       ...
    except (SomeException, SomeOtherException):
        print('Обрабатываем какое-то исключение и еще какое-то исключение одинаково')
    except SomeThridException:
        print('Обрабатываем какое-то третье исключение')
    except Exception as e:
        print('Обрабатываем все остальные ')
    Ответ написан
    Комментировать
  • Как сделать таймер на бд sqlite3?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Как сделать таймер на бд sqlite3?

    sqlite3, как и любая другая база данных, просто хранилище данных. Как уже сказали в комментариях - реализовывать нужно средствами языка.
    Самый простой и наименее затратный с точки зрения ресурсов, вариант - высчитывать добытый уголь при проверке баланса.
    В общих чертах схема следующая:
    юзер "покупает шахту" (т.е. начинает игру), в базу записывается дата и время.
    При вводе соответствующей команды (например /склад) из базы берется время последнего обращения (для только-что начавших - пусть это будет время "покупки") и сравнивается с текущим. На основе количества пройдённых часов увеличивается баланс.
    При этом актуализировать баланс нужно будет не только при "проверке" пользователем но и как минимум при расходных операциях, учитывайте это.

    Второй вариант - используйте модули shelude / aioschedule (для синхронных/асинхронных ботов, соответственно). для ежечасного обновления. Однако учитывайте, что это потребует большего количества ресурсов.
    Ответ написан
    1 комментарий
  • Пишу бота для телеграм (telebot), проблема с асинхронными функциями. В чем причина ошибки?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Если вы дадите какие-то совесть по оформлению или синтаксу кода, я буду вам нереально благодарен.

    Мне вот интересно, вы ищите "советы" по каким-то вещам... Почему вам даже не приходит в голову поискать в офф.документации?
    Как правильно писать то, что вы пытаетесь сделать там описано.
    я тот же sqlite выучил за 1 день

    Не очень похоже. То, что вы посмотрели, уж извините, говноролик* по типу "хреначим бота из палок и ..." не значит, что вы изучили что-то.
    Конкретно - проблема в подобных выражениях:
    cursor.execute(f"INSERT INTO {table}({columns}) VALUES ({values})")

    Писать что-то подобное, тем-более в системе, с которая будет доступна другим людям в интернете можно только в случаях, когда вы целенаправленно хотите словить sql-инъекцию.
    Изучайте основы по документации. По крайней мере какие-то базовые вещи там описаны максимально подробно и даже если вдруг не знаете английский - примеров столько, что даже без чтения понятно.
    --
    * - тут больше вопрос к автору сего творения, который мало-того, что сам не пойми как учится, так еще и путает других.
    Ответ написан
    1 комментарий
  • Как выводить ошибку если в тексте больше 3 слов?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Разделить строку по пробелам и посчитать количество элементов.
    В первом приближении это будет работать.
    Дальше разные плюшки вроде удаления пробелов по краям и т.д.
    Ответ написан
    Комментировать
  • Ошибка создании таблицы в SQLLite3 Python. В чем причина?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Проблема в порядке определения полей/ограничений - sql требует строгого порядка:
    1. определение полей
    2. определение ограничений (опционально)
    3. определение внешних ключей

    Т.е. сперва описываете все поля и только после - указываете блоки FOREIGN KEY
    Ответ написан
    1 комментарий
  • Почему при попытке прочитать json файл выдается исключение (python)?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    У вас, скорее всего, JSON неправильный. По идее - там что-то вида:
    {
     ...
    },
    {
     ...
    }

    Т.е. просто несколько объектов, разделенных запятой (или вообще без них)
    В то время как правильный json должен состоять либо из одного объекта, либо из списка объектов:
    [
      {
       ...
      },
      {
       ...
      }
    ]

    Возможно - поможет добавление квадратных скобок, но без примеров (копировать сюда всю портянку (если там больше 20-30 строк) не советую. 2-3 объекта с сохранением структуры будет достаточно) большего посоветовать не получится
    Ответ написан
  • Как исправить код что бы сработал модуль keyboard python?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Вас не смущает, что вы импортирует модуль и через строчку переопределяете данное имя?
    import keyboard
    from turtle import*
    keyboard = Turtle()

    Далее вы настраиваете вашу черепашку, обозначенную как "клавиатура". Странно, но ок.
    keyboard.color('blue')
    keyboard.shape('turtle')

    После чего в цикле вы ждете, как я понял, нажатия на единицу, при помощи метода wait() из модуля keyboard. Проблема в том, что у вас keyboard это Turtle()
    while True:
        keyboard.wait("1")
        keyboard.fd(30)
    exitonclick()
    Ответ написан
    Комментировать
  • Как правильно использовать lambda выражение?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Вместо filter()используйте map()
    плюс добавьте значение по умолчанию для .get(), чтобы функция не спотыкалась на None
    Ответ написан
    Комментировать
  • Как сделать игрового бота в телеграмм?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Для начала - боты довольно сложная вещь. Без знания основ языка написать что-то нормальное у вас не получится.

    Библиотеки (основные):
    • Pytelegrambotapi
    • Aiogram

    Для хранения данных - база данных.
    В из коробки python есть поддержка sqlite, для остальных баз есть сторонние библиотеки.

    Примеры кода есть в документации/github-репозиториях библиотек. Кроме того, есть куча видосов на Ютубе. Впрочем, как минимум взаимодействие с базой советую изучать строго по документации (ну или как минимум почтить, что такое sql-инъекции и как их избежать)
    Ответ написан
    3 комментария
  • Почему не видит глобальную переменную?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    1.Ну, global base, cur вы указали. Но чтобы они работали, объявлять их нужно перед всеми функциями.
    2.Не стоит подобным образом подключаться к базе. Если нет каких-то особых требований (а я более чем уверен, что их нет), лучше каждый раз создавать новое подключение, после чего закрывать его (или использовать контекстный менеджер)
    Ответ написан
    3 комментария
  • Где смотреть сообщение об ошибках на выделенном сервере?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Для таких ситуаций придумали логи. Есть встроенная библиотека, как альтернатива - loguru
    Ответ написан
    Комментировать
  • Как доставать данные из бд?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Как доставать данные из бд?

    с помощью специального модуля подключится к базе -> сделать запрос -> записать данные в переменную -> как-то их обработать/
    В общем, нужно чтобы переменную work1 сохраняло в базу данных, а после чего при вводе /checkwork брало значение из базы данных, и выводило сообщением, ибо после перезапуска переменные слетают.

    Ну, нужно - хорошо. Делайте. Вы в принципе не реализовали логику работы с базой, так-что поправлять нечего, за вас писать никто ничего не будет (кроме фриилансеров за деньги).
    Так-что вот доки (выбираете одну библиотеку, в зависимости от выбранной базы), изучайте и пишите.
    https://docs.python.org/3/library/sqlite3.html
    https://www.psycopg.org/docs/
    https://www.w3schools.com/python/python_mysql_gets...
    Ответ написан
    Комментировать
  • SQLITE Discord.py почему при заносе в бд он разделяется по 1 символу?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Ну, я бы советовал быть внимательнее.
    Вы же сами вызываете метод для выполнения нескольких запросов:
    cursor.executemany

    Обычно в него передают словарь/кортеж, но в теории ничто не мешает ему пройтись по строке, поочередно подставляя по одной букве.
    Ответ написан
  • Можно ли упростить эту конструкцию try-except?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Прежде всего - всегда используйте максимально конкретное исключение. Использовать базовый Exception можно, но только для отлова оставшихся ошибок.
    while True:
    	try:
    		var = int(input('Введите число: '))
    		break
    	except ValueError:
    		print('Это не число')
    Ответ написан
    2 комментария
  • Какие есть курсы по Python для знающих другие языки?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    не нашёл нормальной документации по Python

    А чем вас официальная документация не устроила?
    Там воды нет.
    В остальном - каноничный Марк Лутц, с его Изучаем Python 5-е издание [1-2 том]
    Ну и от себя хотел спросить можно ли писать {}, чтобы нормально оформлять код (как в том же C#). К примеру, подойдёт ли такой код:

    Увы, но нет.
    Ответ написан
    1 комментарий
  • Как наследовать класс и сделать вывод?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Как работает ООП описано во втором томе "Изучаем Питон" от Марка Лутца. (6-й раздел)
    Выводить можно множеством способов (print в консоль, в файл, в окошко программы?)
    Когда дойдете до указанного раздела, вы гарантированно будете уметь это делать.
    Ответ написан
    Комментировать
  • Как проверить слово, которое пользователь написал в сообщении в телеграме, на наличие его в базе данных?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    слово, которое пользователь написал в сообщении в телеграме

    yes = sql.execute("""SELECT word FROM words WHERE length <= 6""")

    Где в указанном запросе подставлено соответствующее слово?
    Нигде. Сейчас запрос просто выбирает все слова, длинна которых меньше или равна шести символам и выдает первое.
    Подставьте его в запрос способном описанным в документации
    Ответ написан
    Комментировать
  • Проблема с кодом AttributeError: 'Player' object has no attribute '_Player__lvl'. Did you mean: '_Player__LVL'?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Серьезно? Вам интерпретатор прямым текстом говорит, что не найден указанный атрибут:
    AttributeError: У объекта 'Player' нет атрибута '_Player__lvl'. Возможно, вы имели ввиду : '_Player__LVL'?
    Ответ написан
    Комментировать
  • Необходимо решить задачу для курса и понять в чем ошибка моего кода и мышления?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Алгоритм следующий:
    1. В новый список (назовем его letters_count) помещаете список вида [<первая буква>, 1];
    2. Удаляете первую букву из строки;
    3. Далее в цикле по строке сравниваете, совпадает ли текущая буква с буквой в последнем списке letters_count;
    4. Если да - увеличиваете значение числа на единицу;
    5. В противном случае - добавляете новый список по аналогии с первым;
    6. преобразуете letters_count в строку

    Безусловно, может быть более элегантное решение, но это тоже вполне рабочее.

    from random import randint, choice
    def encode_dna(dna:str) -> str:
        if not dna:
            return ''
            
        dna_letters_list = list(dna.lower())
        letters_count = []
        
        letters_count.append([dna_letters_list[0],1])
        dna_letters_list.pop(0)
    
        for letter in dna_letters_list:
            if letter == letters_count[-1][0]:
                letters_count[-1][1] += 1
            else:
                letters_count.append([letter,1])
    
        for count in enumerate(letters_count, start=0):
            index,count = count
            string = ''.join(map(str,count))
            letters_count[index] = string
    
    
        encoded_dna = ''.join(letters_count)        
     
    
        return encoded_dna
    
    
    
    
    if __name__ == '__main__':
        alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
        for i in range(10):
            dna = [choice(alphabet) for _ in range(randint(1,10))]
            dna_str = ''.join(dna)
            
            print(dna_str,'->',encode_dna(dna_str))

    Вывод:
    c -> c1
    ffdcfbeg -> f2d1c1f1b1e1g1
    fgfbebbcbb -> f1g1f1b1e1b2c1b2
    ffefaedac -> f2e1f1a1e1d1a1c1
    g -> g1
    ecbcddf -> e1c1b1c1d2f1
    b -> b1
    f -> f1
    ec -> e1c1
    fgcgcg -> f1g1c1g1c1g1
    Ответ написан
  • Как лучше читать файл?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Первый, разумеется.
    Любая встроенная функция будет с 99.9% быстрее самопального аналога.
    И .read() очевидно быстрее цикла.
    Ответ написан
    Комментировать