[英]limiting invalid input in python 3
我需要限制允许的无效输入的数量,以便在给定的尝试次数后,程序退出。
无效由输入小于零定义。
可以说的尝试次数为3。
def number():
number = float(input('please enter a number (must be greater thatn zero): '))
if number >= 0 :
print ('you choose number:', number)
else:
print ('invalid input')
return
number()
我将如何限制无效输入尝试的次数并使其无效,以使代码返回到再次询问问题并提示输入,但仍跟踪先前的尝试?
您必须使用循环 ,在这种情况下, while
循环将很方便。 您必须声明一个变量invalid_attempts
以保持用户给定的无效输入的数量。
完成循环的条件将是当invalid_attempts
大于或等于3
时,它会在获得无效输入时增加。 您可能需要更改3
以适合您的要求:
def get_input():
invalid_attempts = 0
while invalid_attempts < 3:
number = float(input('please enter a number (must be greater thatn zero): '))
if number >= 0 :
print ('you choose number:', number)
return number # so you can call the method as 'some_variable = get_input()'
else:
print ('invalid input')
invalid_attempts += 1
注意:由于number
是方法的名称,因此您不应在内部使用相同的名称调用变量(因为如果这样做,则在必要时将无法在内部使用该函数),在这种情况下,正在调用方法get_input
。
在数字= ...之前使用whilie循环,例如:
count = 0
while count < 3:
# do rest of the stuffs
count += 1
您还可以使用递归更优雅地做到这一点:
def get_number(max_tries, count = 0)
if count < max_tries:
valid_input = False
number = 0
try:
number = float(input('Please enter a number > 0'))
if number > 0:
valid_input = True
except:
pass
if valid_input:
return number
else:
return get_numbers(max_tries, count+1)
else:
print('Sorry, Too many Tries!)
return None
是否使用while循环或递归通常取决于您的口味。 在许多情况下,它们在功能上是等效的。 此示例还说明了如果用户输入的数字不是数字会发生什么,这将导致float转换抛出。
更新:要澄清OP提出的问题:
def get_numbers(max_tries, count = 0)
定义一个函数get_numbers
,该函数接受两个输入max_tries
和count
。 count
被赋予默认值count = 0
,这意味着如果您在不指定count
参数的情况下调用该函数,它将自动将其分配为0
。 max_tries
没有默认值,这意味着您每次调用函数时都需要指定它,否则python会抛出错误。 如果通常具有相同的最大尝试次数,则还可以为其指定一个默认值,这将使您可以简单地执行number = get_numbers()
并使它按预期工作。
递归 ,过度简化,基本上是函数在执行过程中调用自身时。 假设我们做了以下工作:
number = get_number(10)
然后用户输入-1,这将导致代码达到:
else:
return get_numbers(max_tries, count+1)
由于我们说过get_numbers(10)
, max_tries = 10
, count = 0
,所以这一行变成:
else:
return get_numbers(10, 1)
这将导致函数再次返回调用get_numbers
的结果。 最终,用户将输入有效输入,或者count > max_tries
,这将导致该函数最终返回一个值。
阅读我喜欢的Wiki,如果不绘制递归就很难解释,但是希望可以有所帮助。
实际上,我认为for
循环看起来更好:
for retry in range(5): # number of retries
try:
choice = float(input('please enter a number (must be greater thatn zero): '))
except ValueError:
print('Please enter an actual number')
continue
if choice >= 0:
print('You chose ', choice)
break
else:
print('Number must be >= 0')
continue
else:
print('Too many failures: be more cooperative')
(这称为for-else
构造; else
仅在for
循环未break
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.