python while循环意外行为

时间:2016-01-31 22:31:20

标签: python loops while-loop

我对Python比较陌生,我不明白以下代码会产生后续的意外输出:

x = input("6 divided by 2 is")
while x != 3:
    print("Incorrect. Please try again.")
    x = input("6 divided by 2 is")
    print(x)

其输出为:

6 divided by 2 is 3
Incorrect. Please try again.
6 divided by 2 is 3
3
Incorrect. Please try again.
6 divided by 2 is 

为什么while循环仍在执行,即使x等于3?

5 个答案:

答案 0 :(得分:4)

input()返回一个字符串,您将其与整数进行比较。这将始终返回false。 您必须将input()打包到int()进行有效比较。

x = int(input("6 divided by 2 is"))
while x != 3:
    print("Incorrect. Please try again.")
    x = int(input("6 divided by 2 is"))
    print(x)

详情阅读int() here

答案 1 :(得分:1)

您收到此错误是因为您没有像这样解析输入:

x = int(input("6 divided by 2 is"))

如果用这个语句替换你的inputer语句,它就会起作用。

答案 2 :(得分:1)

输入法给出了字符串。所以你需要将int转换为int:

x = int(input("6 divided by 2 is"))

答案 3 :(得分:1)

以下是我对你问题的回答

Guesses = 0
while(Guesses < 101):
    try:
        x = int(input("6 divided by 2 is: "))
        if(x == 3):
            print("Correct! 6 divide by 2 is", x)
            break
        else:
            print("Incorrect. try again")
            Guesses += 1
    except ValueError:
        print("That is not a number. Try again.")
        Guesses += 1
else:
    print("Out of guesses.")

我假设您希望用户input number,因此我将您的代码放入包含while\else loop的{​​{1}}。 try\except loop循环确保如果用户try\except是一个数字,则会显示inputs,并会告知他们ValueError。如果inputted was not a number限制不高于while\else loopGuesses可确保用户输入问题。此代码将确保如果用户100guesses the answer,则系统会提示用户3;如果用户猜到除了3(数字)以外的任何内容they got the answer right and the loop will end和用户answer will be incorrect;如果will be prompted the question again将其归类为ValueError,则会通知user guesses a string

考虑到这是很久以前的问题,我假设你可能已经忘了这个,或者你想出了答案,但如果不试试这个并告诉我你是否喜欢这个答案。谢谢:))

答案 4 :(得分:0)

我现在自己尝试使用python 2.6,并且在没有转换为int的情况下获得了一个int。例如,当我尝试以下操作时:

x = input("6 divided by 2 is")
print "Your input is %s, %s" % (x, type(x))

我得到以下内容:

6 divided by 2 is 2
Your input is 2, <type 'int'>

这是一个版本问题吗?或者可能是环境问题(我使用OS X)? 我的结论是,使用int()。

使用以前的建议应该是一个好习惯