繁体   English   中英

While循环似乎无法正确检查条件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM