首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >电报“猜测数字”机器人每次收到用户的新猜测时都会更改密码

电报“猜测数字”机器人每次收到用户的新猜测时都会更改密码
EN

Stack Overflow用户
提问于 2021-11-18 15:42:31
回答 1查看 101关注 0票数 1

我正在做一个“猜数字”的电报机器人,它被认为是一个从0到100的整数。当用户试图猜测数字时,机器人应该给他们提示,显示他们的猜测是小于还是大于秘密数字。但每次收到用户的新猜测时,它似乎都会更改密码。

下面是完整的代码

代码语言:javascript
复制
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',它是一个秘密数字的存储,在guess_number函数中是不可能实现的。我认为变量应该放在其他地方,但不知道具体放在哪里。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-18 17:08:30

用于多次聊天

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

代码语言:javascript
复制
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关键字在函数中对其进行访问。

代码语言:javascript
复制
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")

在任何一种情况下,当机器人关闭时,数字都会丢失。选择适合的和keep this in mind

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70022749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档