如果首先输入错误数据,程序会询问两次数字

时间:2015-06-22 22:07:50

标签: python

我是Python的新手(2天前开始)。我试图验证正整数。代码确实验证了数字,但在输入错误输入后它会询问两次。例如,如果我输入单词 Python ,它会说:这不是整数!喜欢这样,但如果我之后输入 20 ,它也会说它不是一个整数,如果我再次输入 20 ,它会读取它。

def is_positive_integer(input):
    #error: when a non-integer is input and then an integer is input it takes two tries to read the integer
    flag = 0
    while flag != 1:
        try:
            input = int(input)
            if input <= 0:
                print "This is not a positive integer!"
                input = raw_input("Enter the number again:")

        except ValueError:
            print "This is not an integer!" 
            input = raw_input("Enter the number again: ")             

        if isinstance(input, int):
            flag = 1
            return input

number = raw_input("Enter the number to be expanded: ")
is_positive_integer(number)
number = int(is_positive_integer(number))

感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

主要的错误是你使用相同的输入(你输入的第一件事)两次调用is_positive_integer(number)

第一次调用is_positive_integer(number)时,会丢弃返回值。只有第二次将结果分配给number

你可以修复&#34;您的程序只需删除is_positive_integer(number)一行即可。

但是,您的代码有点乱,名称is_positive_integer没有描述该函数实际执行的操作。

我会像这样重构一下:

def input_positive_integer(prompt):
    input = raw_input(prompt)
    while True:
        try:
            input = int(input)
            if input <= 0:
                print "This is not a positive integer!"
            else:
                return input
        except ValueError:
            print "This is not an integer!"

        input = raw_input("Enter the number again: ")

number = input_positive_integer("Enter the number to be expanded: ")

答案 1 :(得分:1)

问题源于您拨打is_positive_integer 两次这一事实。所以,第一次调用它时,你会发送一个像'hello'这样的字符串,然后它说它不是一个整数,并告诉你再试一次。然后输入'20',它解析得很好,然后返回。

但是你没有保存对它的引用,所以它无处可去。

然后再次调用该函数,这次保存对它的引用,它首先尝试原始的错误字符串,该字符串仍在number中。然后它抱怨它是一个错误的输入,要求你提供一个新的,并提供它,终止该程序。