Задать вопрос
DredWulf
@DredWulf

Почему телеграм бот на aiogram работает неправильно?

Бот предлагает угадать число от 0 до 10. Но когда получает правильный ответ, всё равно говорить FALSE. Может проблема в ассинхронных функциях? Я их совсем плохо понимаю.

from config import BOT_TOKEN
from aiogram import Bot, Dispatcher, executor, types
import random

bot = Bot(token=BOT_TOKEN)
dp = Dispatcher(bot)

# number to guess
NUMBER = 0


# comes up with a number
def setRand():
    NUMBER = random.randrange(10)
    print(NUMBER)


# handler for /start
@dp.message_handler(commands=['start'])
async def start(msg: types.Message):
    setRand()
    await msg.answer("Try to guess the number from 0 to 10")


# handler for getting answer
@dp.message_handler()
async def getNumber(msg: types.Message):
    if msg.text == str(NUMBER):
        await msg.answer('True!')
    else:
        await msg.answer('False :с')
        await msg.answer('But I came up with new number!')

        setRand()


executor.start_polling(dp)
  • Вопрос задан
  • 169 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
drygdryg
@drygdryg
Python-разработчик
Функция setRand() в вашем коде не изменяет глобальную переменную NUMBER, а лишь создаёт локальную переменную с таким же именем, перекрывающую глобальную переменную. Добавьте следующее в функцию, чтобы она изменяла значение глобальной переменной NUMBER:
def setRand():
    global NUMBER
    NUMBER = random.randrange(10)
    print(NUMBER)


Советую познакомиться с тем, как устроены области видимости в Python.
Но, как упомянули в комментарии к вопросу, лучше не использовать механизм с глобальными переменными в этом коде, а найти более надёжное решение задачи. Думаю, что можно применить конечный автомат (FSM), который реализован в aiogram.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы