1

我是一个全新的程序员,我一直在努力学习 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)

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

4

4 回答 4

3

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

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

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

于 2013-06-28T10:45:38.770 回答
0

尝试这个:

guess = int(raw_input())

如前所述raw_input.__doc__,返回类型是 a string(并且您想要一个int)。这意味着您将 aint与 a进行比较string,这会导致您获得看似错误的结果。有关更多信息,请参阅此答案

于 2013-06-28T10:46:21.900 回答
0

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

    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(猜测)

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

于 2013-06-28T10:51:51.437 回答
-1

我更新了程序。您退出了 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)
于 2013-06-28T10:56:46.333 回答