You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用aiogram开发的Telegram猜数字机器人正确答案返回False问题

Telegram猜数字机器人正确输入却返回False的问题解决

你遇到的问题和异步函数无关,核心原因是全局变量NUMBER的作用域处理错误:

在setRand函数中,直接赋值NUMBER = random.randrange(10)时,Python会默认创建一个局部变量NUMBER,而非修改全局的NUMBER变量。这导致全局的NUMBER始终保持初始值0,所以无论用户输入什么正确数字,getNumber里的判断永远不成立,只会返回"False"。

修复步骤:

  1. 在setRand函数中添加global关键字,明确声明要操作全局变量NUMBER:

    def setRand():
        global NUMBER
        NUMBER = random.randrange(10)
        print(NUMBER)
    
  2. 额外优化:你描述的是猜测0到10之间的数字,但random.randrange(10)生成的是0-9的整数,若要包含10,应改为random.randint(0, 10)。

  3. 可选优化:用户猜对数字后,最好也调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 22:40:41