电报'guess the number'机器人每次从用户那里收到新的猜测时都会更改秘密号码



im制作了一个"猜测数字"电报机器人程序,该程序应该得出一个从0到100的整数。当用户试图猜测这个数字时,机器人应该给他们提示,显示他们的猜测是小于还是大于秘密数字。但它似乎每次收到用户的新猜测时都会更改秘密号码。

这是的全部代码

import random
import telebot
from telebot.types import Message
bot = telebot.TeleBot("-token-")

@bot.message_handler(commands = ('start'))
def guess_number():
a = random.randint(0,100)
a = guess_number.variable
def send_welcome(message):
bot.send_message(message.chat.id, "you entered a guessing game, traveller. Guess a number from 0 to 100, or be eaten by a  dragon.")
@bot.message_handler(func=lambda message: True)
def checking(message):
try: 
user_message = int(message.text)
if user_message > guess_number.variable:
bot.send_message(message.chat.id, "your number is greater than mine")
elif user_message < guess_number.variable:
bot.send_message(message.chat.id, "your number is smaller than mine")
else:
bot.send_message(message.chat.id, "yep, that's the right number")
except ValueError:
bot.send_message(message.chat.id, "you must enter an integer")
bot.polling()

a = random.randint(0,100) a = guess_number.variable它还说变量"a",作为秘密号码的存储的guess_number函数无法访问。我认为变量应该放在其他地方,但不能弄清楚具体在哪里。

用于多人聊天

如果你想让它适用于多个用户,你需要一个数据库来存储每次聊天的号码。一本字典可以作为一个小例子。

numbers = dict()
@bot.message_handler(commands=('start'))
def guess_number(message):
numbers[message.chat.id] = random.randint(0, 100)
@bot.message_handler(func=lambda message: True)
def checking(message):
try:
user_message = int(message.text)
if user_message > numbers[message.chat.id]:
bot.send_message(message.chat.id, "your number is greater than mine")
elif user_message < numbers[message.chat.id]:
bot.send_message(message.chat.id, "your number is smaller than mine")
else:
bot.send_message(message.chat.id, "yep, that's the right number")
except ValueError:
bot.send_message(message.chat.id, "you must enter an integer")
except (TypeError, KeyError):
bot.send_message(message.chat.id, "there's no number to guess! say /start to start")

进行一次聊天

如果你只需要这个机器人在一次聊天中工作,你可以选择使用一个全局变量来存储秘密号码。然后使用global关键字使其在函数中可访问。

the_number = None
@bot.message_handler(commands=('start'))
def guess_number(message):
global the_number
the_number = random.randint(0, 100)
@bot.message_handler(func=lambda message: True)
def checking(message):
global the_number
try:
user_message = int(message.text)
if user_message > the_number:
bot.send_message(message.chat.id,"your number is greater than mine")
elif user_message < the_number:
bot.send_message(message.chat.id,"your number is smaller than mine")
else:
bot.send_message(message.chat.id, "yep, that's the right number")
except ValueError:
bot.send_message(message.chat.id, "you must enter an integer")

无论哪种情况,当机器人关闭时,数字都会丢失。选择合适的并记住

最新更新