【问题标题】:Python While Loop woesPython While 循环问题
【发布时间】:2013-06-28 10:40:45
【问题描述】:

我是一个全新的程序员,我一直在努力学习 Python (2.7)。我在网上找了一些练习来尝试,其中一个涉及创建一个简单的猜谜游戏。

尽我所能,我无法弄清楚我的代码有什么问题。如果第一次猜对了数字,则其中的 while 循环将正确执行。此外,如果在第一次尝试时猜到了较低的数字,则执行正确的代码块 - 但随后所有“猜测”都会产生“较高”数字的代码块,而不管输入如何。我已经在整个代码中打印出变量来尝试看看发生了什么 - 但它没有帮助。任何见解将不胜感激。谢谢!这是我的代码:

from random import randint

answer = randint(1, 100)
print answer
i = 1


def logic(guess, answer, i):
    guess = int(guess)
    answer = int(answer)
    while guess != answer:
        print "Top of Loop"
        print guess
        print answer
        i = i + 1
        if guess < answer:
            print "Too low. Try again:"
            guess = raw_input()
            print guess
            print answer
            print i

        elif guess > answer:
            print "Too high. Try again:"
            guess = raw_input()
            print guess
            print answer
            print i

        else:
            print "else statement"

    print "Congratulations! You got it in %r guesses." % i


print "Time to play a guessing game!"
print "Enter a number between 1 and 100:"
guess = raw_input()
guess = int(guess)

logic(guess, answer, i)

我确定这是显而易见的,如果我只是愚蠢,我提前道歉。

【问题讨论】:

  • guess = raw_input() 更改为 guess = int(raw_input())。在 python3 中更容易发现这一点,因为将字符串与整数进行比较会引发错误。
  • 就是这样 - 非常感谢!

标签: python while-loop


【解决方案1】:

您已经注意到 raw_input() 返回一个字符串(正如我在您的代码底部注意到的那样)。但是您忘记在 while 循环内将输入更改为整数。

因为它是一个字符串,它总是大于一个数字(“hi” > n),这就是为什么总是调用"Too high. Try again:"

所以,只需将 guess = raw_input() 更改为 guess = int(raw_input())

【讨论】:

    【解决方案2】:

    试试这个:

    guess = int(raw_input())
    

    正如raw_input.__doc__ 所描述的,返回类型是string(你想要一个int)。这意味着您将intstring 进行比较,这会导致您获得看似错误的结果。请参阅this answer 了解更多信息。

    【讨论】:

      【解决方案3】:

      好的,我发现了你的问题。问题出在这段代码中:

          if guess < answer:
              print "Too low. Try again:"
              guess = raw_input()
              print guess
              print answer
              print i
      
          elif guess > answer:
              print "Too high. Try again:"
              guess = raw_input()
              print guess
              print answer
              print i
      

      在上面的代码中,您将输入作为字符串,但您尝试将其与整数进行比较。您需要做的就是将输入转换为整数,如下所示:

      猜测 = raw_input()
      猜测 = int(猜测)

      这应该可以解决你的问题:)

      【讨论】:

        【解决方案4】:

        我更新了程序。您退出了 while 循环,因为在 elif 组中将猜测作为输入后,您忘记将其转换为 int,因此它抛出了错误。现在,已更正,但您也可以对其进行优化。

        import sys
        
        from random import randint
        
        answer =  randint(1, 100)
        '''randint(1, 100)'''
        print (answer)
        i = 1
        
        
        def logic(guess, answer, i):
            guess = int(guess)
            answer = int(answer)
            while guess != answer:
                print ("Top of Loop")
                print (guess)
                print (answer)
                i = i + 1
        
                if guess < answer:
                    print ("Too low. Try again:")
                    guess = int(input())
                    print (guess)
                    print (answer)
                    print (i)
        
                elif guess > answer:
                    print ("Too high. Try again:")
                    guess = int(input())
                    print (guess)
                    print (answer)
                    print (i)
        
                else:
                    print ("else statement")
        
            print ("Congratulations! You got it in %r guesses." % i)
        
        
        print ("Time to play a guessing game!")
        print ("Enter a number between 1 and 100:")
        guess = input()
        guess = int(guess)
        
        logic(guess, answer, i)
        

        【讨论】:

        • Downvote... 这个答案不仅迟到了 10 分钟(还有其他三个答案已经说明了完全相同的事情),而且您还将代码转换为 python3,这肯定不是 OP 想要的.此外,由于复制粘贴了所有 OP 代码,您所做的更改并不明显。
        猜你喜欢
        • 1970-01-01
        • 2020-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-19
        • 2011-03-04
        • 1970-01-01
        相关资源
        最近更新 更多