@nebosplav

Как проверить слово, которое пользователь написал в сообщении в телеграме, на наличие его в базе данных?

Бот , который составляет слова из большого слова (Анаграммы).
В моем коде всегда выдается "неправильно", вне зависимости от того, есть слово в бд или нет.
Часть моего кода, где нужно проверить слово на наличие в бд:
def execute_read_query(message):
    db = sqlite3.connect('ruword.db', check_same_thread=False)
    sql = db.cursor()
    yes = sql.execute("""SELECT word FROM words WHERE length <= 6""")
    wordyess = yes.fetchone()
    wordyes = str(wordyess)
    if wordyes in message.text:
        bot.send_message(message.chat.id, 'такое слово есть!')
    else:
        bot.send_message(message.chat.id, 'неправильно')
    db.close()
  • Вопрос задан
  • 131 просмотр
Пригласить эксперта
Ответы на вопрос 3
@alekssamos
Программист любитель
yes = sql.execute("SELECT word FROM words WHERE word == ?", (message.text,))
Ответ написан
Комментировать
AlexNest
@AlexNest Куратор тега Python
Работаю с Python/Django
слово, которое пользователь написал в сообщении в телеграме

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

Где в указанном запросе подставлено соответствующее слово?
Нигде. Сейчас запрос просто выбирает все слова, длинна которых меньше или равна шести символам и выдает первое.
Подставьте его в запрос способном описанным в документации
Ответ написан
Комментировать
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Что касается анаграмм. Положим, у вас есть целевое слово и словарь. Надо из словаря выбрать все слова, которые можно составить из букв целевого слова.
Если решать «в лоб», как у вас, то надо получить множество вариантов перестановок букв целевого слова, а затем произвести логическое умножение множества полученного и множества подходящих слов из словаря.
Проблема тут в том, что это будут большие множества и всё это будет тормозить.

Надо сделать по-другому:
словарь надо индексировать, а именно - получить для каждого слова индекс его на алфавите, отображающий количество каждой буквы алфавита в слове.
Затем берёте целевое слово, считаете для него индекс и затем из словаря выбираете слова с аналогичным индексом. Создание первичного индекса займёт время, зато потом всё будет почти мгновенно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы