我是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))
感谢任何帮助。
答案 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
中。然后它抱怨它是一个错误的输入,要求你提供一个新的,并提供它,终止该程序。