Проверка ответа в Telegram (Python)
Пытаюсь написать телеграм бота на Python, задача у него весьма простая, он должен рандомно сгенерировать пример из таблицы умножения а затем дождаться ответа пользователя, сравнить его с переменной в которой хранится ответ и вывести на экран правильно или нет. Так вот у меня бот не хочет ждать ответа, а сразу говорит что все не правильно, если я ставлю временную задержку, скажем на 3 секунды, и ввожу правильный ответ, то он тоже игнорируется, и вместо неправильно, бот говорит что не знает что сказать. Получается если я что-то вбиваю руками,то он выходит из цикла? Короче я запутался, второй день сижу с этим вопросом. Подскажите пожалуйста что нужно исправить? Я занимаюсь изучением самостоятельно, знания не такие глубокие, за код сильно не пинайте :) Спасибо.
Вот кусок кода, где происходит процесс
for i in start:
message.text()
if message.text == z:
i=0
while i<10:
x = random.randint(2,9)
y = random.randint(2,9)
z=x*y
bot.send_message(message.chat.id, str(x) + ' * ' + str(y) + ' = ?')
i=i+1
if z == message.text:
bot.send_message(message.chat.id, 'Молодец!')
else:
bot.send_message(message.chat.id, 'Не правильно... ')
Ответы (3 шт):
Сочинил такой вот пример для умножения двух чисел с использованием telegram-бота. Он рабочий, но конечно сделан на коленке. В частности, работает без использования цикла.
import telebot
from random import random, randint
global x
global y
global z
x = randint(2,9)
y = randint(2,9)
z = x * y
bot = telebot.TeleBot('токен')
@bot.message_handler(commands=['start'])
def start_message(message):
bot.send_message(message.chat.id, 'Умножение двух чисел: '+str(x) + ' * ' + str(y) + ' = ?')
@bot.message_handler(content_types=['text'])
def send_text(message):
if message.text == str(z):
bot.send_message(message.chat.id, 'Молодец! ')
elif message.text != str(z):
bot.send_message(message.chat.id, 'Не правильно ...')
bot.polling()
Я переделал предложенный @Assur вариант (за что ему спасибо!) и он уже вполне работоспособен :)
import telebot
from random import random, randint
x = 0
y = 0
z = 0
bot = telebot.TeleBot('ВашТокен')
@bot.message_handler(commands=['start'])
def start_message(message):
global x
global y
global z
x = randint(2,9)
y = randint(2,9)
z = x * y
bot.send_message(message.chat.id, 'Умножение двух чисел: '+str(x) + ' * ' + str(y) + ' = ?')
@bot.message_handler(content_types=['text'])
def send_text(message):
global z
if message.text == str(z):
bot.send_sticker(message.chat.id, 'CAACAgIAAxkBAAEE6WRimyYQMdv9pVvzi0gCLvwg-XIdYQACHQADwDZPE17YptxBPd5IJAQ')
elif message.text != str(z):
bot.send_sticker(message.chat.id, 'CAACAgIAAxkBAAEE6WhimyYxcd7CoWjbAtcenKG9QnWDgQACIAADwDZPE_QPK7o-X_TPJAQ')
bot.send_message(message.chat.id, str(x) + ' * ' + str(y) + ' = ' + str(z))
bot.polling()
Используя библиотеку random и не такое можно творить.
imports
token()
#словарь для хранения ответов
bot.user_data = {}
# функция генерации примера
def generate_example():
a = random.randint(1, 9)
b = random.randint(1, 9)
example = f"{a} x {b} = "
answer = a * b
return example, answer
#обработчик команды старт
@bot.message_handler(commands=['start'])
def handle_start(message):
example, answer = generate_example()
bot.user_data[message.chat.id] = answer
bot.send_message(message.chat.id, example)
#обработчик текстовых сообщений
@bot.message_handler(content_types=['text'])
def handle_text(message):
user_answer = message.text
answer = bot.user_data.get(message.chat.id)
if user_answer == str(answer):
bot.send_message(message.chat.id, "Правильно!")
else:
bot.send_message(message.chat.id, "Неправильно. Попробуй еще раз.")
example, answer = generate_example()
bot.user_data[message.chat.id] = answer
bot.send_message(message.chat.id, example)