Python 若首先输入了错误的数据,程序会两次询问数字
我对Python非常陌生(2天前开始)。我试图验证正整数。该代码确实验证了数字,但在输入错误的输入后,它会询问两次。例如,如果我输入单词Python,它会说:这不是一个整数!应该是这样的,但如果我在之后输入20,它也会说它不是整数,如果我再次输入20,它会读取它Python 若首先输入了错误的数据,程序会两次询问数字,python,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 trie
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))
def为正整数(输入):
#错误:当输入一个非整数,然后输入一个整数时,需要两次尝试读取该整数
标志=0
一面旗帜!=1:
尝试:
输入=int(输入)
如果输入则问题源于这样一个事实:您调用的是两次正整数。因此,第一次调用它时,您向它发送一个字符串,如'hello'
,然后它说它不是整数,并告诉您再试一次。然后输入解析良好的'20'
,然后返回
但是你没有保存对它的引用,所以它没有任何用处
然后再次调用该函数,这次保存对它的引用,它首先尝试原始的坏字符串,该字符串仍然存在于number
中。然后它抱怨输入错误,要求您输入一个新的输入,然后您提供它,终止程序。问题源于您两次调用都是正整数。因此,第一次调用它时,您向它发送一个字符串,如'hello'
,然后它说它不是整数,并告诉您再试一次。然后输入解析良好的'20'
,然后返回
但是你没有保存对它的引用,所以它没有任何用处
然后再次调用该函数,这次保存对它的引用,它首先尝试原始的坏字符串,该字符串仍然存在于number
中。然后它抱怨输入错误,要求您输入一个新的输入,然后您提供它,终止程序。主要错误是您使用相同的输入(输入的第一件事)调用了两次is\u positive\u integer(number)
第一次调用时为正整数(number)
,您会丢弃返回值。仅在第二次将结果分配给number
您可以通过删除仅带有正整数(数字)
的行来“修复”程序
但是,您的代码有点凌乱,而且名称是_正_整数
并没有描述函数的实际功能
我会像这样重构:
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: ")
def输入\正\整数(提示):
输入=原始输入(提示)
尽管如此:
尝试:
输入=int(输入)
如果输入则主要错误是,您使用相同的输入(第一次输入)调用了两次is\u positive\u integer(number)
第一次调用时为正整数(number)
,您会丢弃返回值。仅在第二次将结果分配给number
您可以通过删除仅带有正整数(数字)
的行来“修复”程序
但是,您的代码有点凌乱,而且名称是_正_整数
并没有描述函数的实际功能
我会像这样重构:
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: ")
def输入\正\整数(提示):
输入=原始输入(提示)
尽管如此:
尝试:
输入=int(输入)
如果输入非常感谢您的帮助。但是我不懂你的代码。while循环条件是如何变为false的?它永远不会变为false,但循环会随着返回输入
行退出。return
语句在其返回的函数中自动断开循环。这就是为什么原始代码实际上不需要行flag=1
,因为您在执行该操作后立即返回。我不知道,这就是我使用标志的原因。这是我唯一想到的事情。再次感谢。非常感谢你的帮助。但是我不懂你的代码。while循环条件是如何变为false的?它永远不会变为false,但循环会随着返回输入
行退出。return
语句在其返回的函数中自动断开循环。这就是为什么原始代码实际上不需要行flag=1
,因为您在执行该操作后立即返回。我不知道,这就是我使用标志的原因。这是我唯一想到的事情。再次感谢。