使用aiogram开发的Telegram猜数字机器人正确答案返回False问题
Telegram猜数字机器人正确输入却返回False的问题解决
你遇到的问题和异步函数无关,核心原因是全局变量NUMBER的作用域处理错误:
在setRand函数中,直接赋值NUMBER = random.randrange(10)时,Python会默认创建一个局部变量NUMBER,而非修改全局的NUMBER变量。这导致全局的NUMBER始终保持初始值0,所以无论用户输入什么正确数字,getNumber里的判断永远不成立,只会返回"False"。
修复步骤:
在
setRand函数中添加global关键字,明确声明要操作全局变量NUMBER:def setRand(): global NUMBER NUMBER = random.randrange(10) print(NUMBER)额外优化:你描述的是猜测0到10之间的数字,但
random.randrange(10)生成的是0-9的整数,若要包含10,应改为random.randint(0, 10)。可选优化:用户猜对数字后,最好也调用
setRand生成新数字,方便用户继续游戏。
完整修复后代码:
from aiogram import Bot, Dispatcher, executor, types import random BOT_TOKEN = "你的机器人令牌" # 替换为实际的机器人令牌 bot = Bot(token=BOT_TOKEN) dp = Dispatcher(bot) # number to guess NUMBER = 0 # comes up with a number def setRand(): global NUMBER NUMBER = random.randint(0, 10) # 生成0到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!') setRand() # 猜对后生成新数字 else: await msg.answer('False :с') await msg.answer('But I came up with new number!') setRand() executor.start_polling(dp)
内容的提问来源于stack exchange,提问作者Deniel Dell
相关产品推荐
相关产品推荐

