Python 在1-100之间创建一个不带';不要每次都改变

Python 在1-100之间创建一个不带';不要每次都改变,python,google-app-engine,Python,Google App Engine,我在python谷歌应用程序引擎中创建了一个小猜谜游戏,我试图将答案设置为1-100之间的随机数 这可以通过 import random #Sets the answer to a random integer between 1 and 100 answer = random.randint(1,100) 这很好。但是我有下面的代码,每次用户猜到答案时,它都会被重置为一个随机数,所以我想知道哪种方法最好只存储一次数字,然后它将保持为该数字 class GuessGame(webapp2.R

我在python谷歌应用程序引擎中创建了一个小猜谜游戏,我试图将答案设置为1-100之间的随机数

这可以通过

import random

#Sets the answer to a random integer between 1 and 100
answer = random.randint(1,100)
这很好。但是我有下面的代码,每次用户猜到答案时,它都会被重置为一个随机数,所以我想知道哪种方法最好只存储一次数字,然后它将保持为该数字

class GuessGame(webapp2.RequestHandler):
    def get(self):
        #Sets user to the current user
        user = users.get_current_user()
        #Create logout URL for user
        logout_url = users.create_logout_url(self.request.path)
        #If user is logged in do the following
        if user:
            #Tells jinja2 to use numberguess.html template
            template = JINJA_ENVIRONMENT.get_template('numberguess.html')
            #Sets the values to pass through to the template
            template_values = {
                'user': user.nickname(),
                'url_logout': logout_url,
                'url_logout_text': 'Log out',
            }
            #Sends those values to the template
            self.response.write(template.render(template_values))
        else:
            #If user isn't logged in then create the login url
            self.redirect(users.create_login_url(self.request.uri))

    def post(self):
        #Sets user to the current user
        user = users.get_current_user()
        #Create logout URL for user
        logout_url = users.create_logout_url(self.request.path)
        #If user is logged in do the following
        if user:
            #Tells jinja2 to use numberguess.html template
            template = JINJA_ENVIRONMENT.get_template('numberguess.html')
            #Gets the content from the form that has been sent via POST
            stguess = self.request.get('content')
            #Sets msg to a string
            msg = ''
            #Sets guess to minus 1 to begin with
            guess = -1
            try:
                #Sets guess to what was sent in the form only if its an int
                guess = int(stguess)
            except:
                #If not an int then set it to minus 1
                guess = -1
            #Sets the answer to a random integer between 1 and 100
            answer = random.randint(1,100)
            #If the guess is the same as the answer then set msg to correct
            if guess == answer:
                msg = 'Congrats! The guess is correct!'
            #If guess is less than 0 tell the user to provide positive number
            #This also works if user tries to input a string because of the try/except code
            elif guess < 0:
                msg = 'Please provide a positive number'
            #If guess too low then set msg
            elif guess < answer:
                msg = 'Your guess is too low'
            #If guess too high then set msg
            else:
                msg = 'Your guess is too high'
            #Sets the values to pass through to the template
            template_values = {
                'user': user.nickname(),
                'url_logout': logout_url,
                'url_logout_text': 'Log Out',
                'guess': stguess,
                'guess_text': msg,
            }
            #Sends those values to the template
            self.response.write(template.render(template_values))
        else:
            self.redirect(users.create_login_url(self.request.uri))
            self.redirect(users.create_login_url(self.request.uri))
类猜测游戏(webapp2.RequestHandler):
def get(自我):
#将用户设置为当前用户
user=users.get\u current\u user()
#为用户创建注销URL
logout\u url=users.create\u logout\u url(self.request.path)
#如果用户已登录,请执行以下操作
如果用户:
#告诉jinja2使用numberguess.html模板
template=JINJA_环境。获取_模板('numberguess.html')
#设置要传递到模板的值
模板_值={
“用户”:用户。昵称(),
“url\u注销”:注销\u url,
“url\u注销\u文本”:“注销”,
}
#将这些值发送到模板
self.response.write(template.render(template_值))
其他:
#如果用户未登录,则创建登录url
重定向(users.create\u login\u url(self.request.uri))
def post(自我):
#将用户设置为当前用户
user=users.get\u current\u user()
#为用户创建注销URL
logout\u url=users.create\u logout\u url(self.request.path)
#如果用户已登录,请执行以下操作
如果用户:
#告诉jinja2使用numberguess.html模板
template=JINJA_环境。获取_模板('numberguess.html')
#从通过POST发送的表单中获取内容
stguess=self.request.get('content')
#将msg设置为字符串
味精=“”
#首先将“猜测”设置为负1
猜测=-1
尝试:
#仅当其为int时,才将猜测设置为表单中发送的内容
guess=int(stguess)
除:
#如果不是整数,则将其设置为负1
猜测=-1
#将答案设置为1到100之间的随机整数
答案=random.randint(1100)
#如果猜测与答案相同,则将msg设置为correct
如果猜测==答案:
祝贺你!猜对了
#如果猜测值小于0,请告诉用户提供正数
#如果用户因为try/except代码而尝试输入字符串,则此操作也有效
elif guess<0:
msg='请提供一个正数'
#如果猜测过低,则设置msg
elif guess<答案:
msg='您的猜测太低'
#如果猜测过高,则设置msg
其他:
msg='您的猜测太高'
#设置要传递到模板的值
模板_值={
“用户”:用户。昵称(),
“url\u注销”:注销\u url,
“url\u注销\u文本”:“注销”,
猜猜看,
“猜测文字”:msg,
}
#将这些值发送到模板
self.response.write(template.render(template_值))
其他:
重定向(users.create\u login\u url(self.request.uri))
重定向(users.create\u login\u url(self.request.uri))

在生成随机数之前提供固定种子。这将导致每次生成相同的数字序列

 import random
 random.seed(5)
 random.randint(1,100)
=> 42
 random.randint(1,100)
=> 28
 random.randint(1,100)
=> 25
 random.randint(1,100)
=> 1
 random.seed(5)
 random.randint(1,100)
=> 42
 random.randint(1,100)
=> 28
 random.randint(1,100)
=> 25
 random.randint(1,100)
=> 1

您需要将值存储在中

这可能需要一些润色,但我会这样做:

class StoredRandomNumber(ndb.Model):
    User = ndb.StringProperty()
    answer = ndb.IntegerProperty()
    GuessNumber = ndb.IntegerProperty(default=0)
在您的帖子中:

        randomEntity = StoredRandomNumber.query(StoredRandomNumber.User==str(user)).get()
        if randomEntity == None:
            randomEntity = StoredRandomNumber(User=str(user), answer=random.randint(1,100))


        if guess == randomEntity.answer:
            msg = 'Congrats! The guess is correct!'
            #re-seed for new game
            randomEntity.answer =random.randint(1,100)
            randomEntity.GuessNumber = 0
        elif guess < 0:
            msg = 'Please provide a positive number'
            randomEntity.GuessNumber +=1
        elif guess < randomEntity.answer:
            msg = 'Your guess is too low'
            randomEntity.GuessNumber +=1
        else:
            msg = 'Your guess is too high'
            randomEntity.GuessNumber +=1

        #Save the updates
        randomEntity.put()
randomEntity=StoredRandomNumber.query(StoredRandomNumber.User==str(User)).get()
如果randomEntity==无:
randomEntity=StoredAndomNumber(用户=str(用户),答案=random.randint(1100))
如果guess==randomEntity.answer:
祝贺你!猜对了
#重新播种新游戏
randomEntity.answer=random.randint(1100)
randomEntity.GuessNumber=0
elif guess<0:
msg='请提供一个正数'
randomEntity.GuessNumber+=1
elif guess
为什么不在构造函数中设置变量?这将阻止它再次被设置。如果用户猜测正确,为什么要存储以前的结果correct@Nimi我应该把这个放在哪里?我明白了,但是我怎么能让这个数在1-100之间呢?如果你这样做的话,任何碰到同一个实例的人都会有相同的数字来猜测。无论何时猜测该数字,您都将重新创建该随机数,从而更改同一实例上其他用户的实际答案。这不是真正的解决方案。在标准python中,这将非常有效。不幸的是,应用程序引擎上没有:(