![](/img/trans.png)
[英]mechanicalsoup's StatefulBrowser does not seem to refresh correctly in a while True loop
[英]While loop does not seem to check condition correctly
我正在开发一个游戏,作为学习代码教程的一部分。
下面的类有一个while循环,应该返回'finished'或退出循环并返回'death'(这些是运行游戏的dict条目),但看起来甚至没有运行。 我正在看def guess:
后的while循环def guess:
该循环旨在要求用户猜测1到3之间的数字。 如果他们猜错了三遍以上,他们将“失败”并返回“死亡”,否则返回“完成”。
但是,当我玩游戏时,甚至没有提示我输入数字,而是“失败的猜测太多,您输了!” 即使猜测为0,也会打印。
class Smaug(Scene):
def enter(self):
print "Smaug is a terrifying huge fire breathing dragon, but you must get the Arkenstone from him for Thorin"
print "In Smaug's cave, the Lonely Mountain, Smaug notices your presence and challenges you to a game"
print "He says \"Guess a number between 1 and 3\""
smaugNum = random.randint(1, 3)
print "Smaugs number cheat:", smaugNum
guesses = 0
def guess():
while guesses < 4:
print "Guess a number between 1 and 3"
numb = raw_input("> ")
if numb == smaugNum:
print "Well done! You win."
Player.BilbosStuff.append('arkenstone')
print "Now Bilbo has", Player.BilbosStuff
return 'finished'
else:
print "You lose!"
guesses += 1
guess()
print "Too many failed guesses, you lose!"
return 'death'
查看代码块的嵌套,是否是在while循环中返回“完成”时,它是否也自动作为更广泛的类的一部分返回? 换句话说,如果numb == smaugNum,那么我需要Smaug类来返回完成。
问题在于您根本没有调用guess()
函数。您将guess()
作为函数,并且根本没有调用它。 因此,控件直接跳转到该功能之后的下一行。 最好的方法是删除该函数并使用如下代码:
guesses = 0
while guesses < 4:
print "Guess a number between 1 and 3"
numb = raw_input("> ")
if numb == smaugNum:
print "Well done! You win."
Player.BilbosStuff.append('arkenstone')
print "Now Bilbo has", Player.BilbosStuff
return 'finished'
else:
print "You lose!"
guesses += 1
print "Too many failed guesses, you lose!"
return 'death'
您在enter
的中间定义了guess
smab dab,但从未调用过它。
块就像
class Smaug:
def enter:
#here's what to do when enter() is called
def guess:
#here's what to do when guess() is called
#here's some more stuff to do when enter() is called
这里的问题是,您将无限递归到guess函数,而从不首先调用guess()。
在增加您的猜测计数器之后,您无需再次调用guess(),因为由于猜测的数量少于4,执行仍将在while循环内,只需信任while循环即可进行比较。 避免手动调用guess()。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.