Python While循环不会在被要求时退出

时间:2016-04-13 17:46:48

标签: python python-3.x

我不明白为什么当用户输入“0”时,循环不会退出。

def floatInput():
    done = False
    while not done:
        integerIn = input("Please enter an integer < 0 to finish >: ")
        try:
            integerIn = int(integerIn)            
        except:
            print("I was expecting an integer number, please try again...")
            import sys
            sys.exit()
        if integerIn == "0":
           done = True
        else:
            integers.append(integerIn)
    return integers

5 个答案:

答案 0 :(得分:2)

原因是因为integerIn是一个整数,您将其视为if integerIn=="0"中的字符串。将其替换为integerIN==0即可完成工作。

答案 1 :(得分:2)

def floatInput():
    done = False
    while not done:
        integerIn = input("Please enter an integer < 0 to finish >: ")
        try:
            integerIn = int(integerIn)            
        except:
            print("I was expecting an integer number, please try again...")
            import sys
            sys.exit()

上面的所有内容都很好,但是一旦你进行了比较,就会忘记你已经将输入转换为int。

if integerIn == "0":

应该是

if integerIn == 0:

答案 2 :(得分:1)

您正在转换为整数,然后检查字符串&#34; 0&#34;的相等性。

答案 3 :(得分:1)

试试这个

if integerIn == 0:

现在应该工作。

答案 4 :(得分:1)

编辑关于使用inputraw_input的建议。刚刚看到你的python 3.x标签,但决定留给未来的读者。

那里你遇到的问题很少......

首先,在这一行:

integers.append(integerIn)

开始时integers在哪里?除非它是全局名称,否则必须在函数中定义它。

第二,在这一行:

if integerIn == "0":

你在这里比较整数和字符串,这里有一个东西:在python中(在这里使用python 2.7)如果你进行比较,字符串将比任何数字更大,所以{ {1}}将始终评估为integerIn == "0"

修复此问题:

False

最后,我应该告诉你这个......你的代码看起来会抛出if integerIn == 0: ,而不是执行你在NameError声明中所做的事情。

尝试使用以下测试用例并尝试自己解释行为:)

except

要避免下次出现此类问题,请使用Please enter an integer < 0 to finish >: test Please enter an integer < 0 to finish >: "test" 代替raw_input。所以这一行:

input

应该是这样的:

integerIn = input("Please enter an integer < 0 to finish >: ")

注意:我不确定,但我认为integerIn = raw_input("Please enter an integer < 0 to finish >: ") 在python 3.x中不存在,而raw_input将完全相同。如果我错了,请纠正。 但是,如果您正在使用python 3,那么我认为您应该没有问题。

这是python 2.x中的input vs input

raw_input()评估用户输入,然后将其返回。

input将以字符串形式返回用户输入。

这样:

raw_input