2011-08-17 47 views
3

我正在创建一个猜数字游戏来帮助自己学习如何使用Google的App Engine。我将当前答案作为随机数存储在数据存储中。每次用户猜测我都想在GqlQuery中找出答案,并与用户猜测进行比较。当我使用GqlQuery来提取答案时,它返回'None',我不知道为什么或者要改变什么来获得随机数。为什么这个Gql查询返回None? (使用Python和App Engine)

这里是我存放了答案 -

class Answer(db.Model): 
    ans = db.IntegerProperty() 

这里是我保存的随机数,当用户创建了一个新的游戏 -

thisanswer =(random.randint(1, 100)) 
answer = Answer(ans = thisanswer) 
answer.put() 

我试着拉了答案出来当用户提交一个猜测,所以我可以比较他们的猜测是这样的 -

q = db.GqlQuery("SELECT * FROM Answer") 
q = q.fetch(1) 
for p in q: 
    answer = p.ans 

所以当我尝试

if guess > answer: 
    msg = "Too high!" 
elif guess < answer: 
    msg = "Too low!" 

等我得到味精“太高了!”每次。所以我改变了“太高!”味精这个 -

msg = "Too high! " + str(answer) 

和我所得到的是 -

“太高了!无”

为什么这个代码返回“无”的价值?你建议我改变以获得我期望得到的随机数。我一直在关注数据存储的App Engine Python文档,但显然我忽略了一些东西。感谢您对此的任何见解。

+1

似乎奇数重用问:'Q = q.fetch(1)'。尝试'在q.fetch(1)中使用p:'而是省略了前面的语句。 – hyperslug

回答

2

这可能在数据库中没有答案。与验证:

msg = "Total answers in database: " + str(Answer.all().count()) 

获得在数据库中的第一个答案将是更优雅的方式:

answer = Answer.all().get() 
# or (equivalent) 
answer = db.GqlQuery("SELECT * FROM Answer").get() 

if answer is not None: 
    number = answer.ans 
else: 
    number = None 
+0

好的谢谢你的输入。我现在看到数据库中真的没有答案了。这导致我相信问题是我如何将答案放入数据库中。你有没有更多的想法 - 这次为什么我上面的代码将随机数存入数据库(使用answer.put()的代码)的代码可能没有被正确写入? – stairsflowers

+0

尝试添加答案并立即查询数据库,例如'Answer(ans = 17).put()'和下一行'msg = str(Answer.all()。count())',看看你得到了什么。 – orip

+0

它工作,我把一个随机数作为一个新的游戏,并得到了一个数字。但是,当我尝试猜测一个数字时,它仍然会返回None .. – stairsflowers