我试图在程序关闭之前限制无效输入的数量。所以如果输入无效,我需要程序循环回原始输入问题。我的尝试限制是3。
我不确定使用什么语法或我应该如何构建它。
以下是我的代码示例:
min_mile = 0
def main():
print('hello',name,', today we will be doing some standard to metric conversions.')
print('The first conversion will be to convert miles to kilometers.')
MileToKm()
def MileToKm():
mile = float(input('What is the number of miles that you would like to convert? ')
mile_conv = mile * 1.6
if mile_conv > min_mile :
print ('The result would be', format(mile_conv,'.2f'),'kilometers.')
else:
exit(print('invalid input'))
main()
现在,如果转换后的输入显示为负数,则认为无效。我需要对其进行修改,以便用户在程序关闭之前有三次尝试输入有效数字。
我该怎么做?
我在python 3.3.3
答案 0 :(得分:1)
将MileToKm
的退出路径更改为如下所示:
if mile_conv > min_mile :
print ('The result would be', format(mile_conv,'.2f'),'kilometers.')
return True
else:
return False
然后将函数包装起来处理重试:
def TryMileToKm():
attempts = 0
while attempts < 3:
attempts += 1
if MileToKm(): break
if attempts >= 3:
print 'Invalid input'
exit(1)
这不是最惯用的方式,但我试图保持意图明显。
编辑非常好,这里是:
def miles_to_km(miles):
return miles * 1.6
def read_miles(prompt):
miles = float(input(prompt))
if miles < 0: raise ValueError()
return miles
def read_miles_retry(prompt, retries = 3):
while retries > 0:
try:
return read_miles(prompt)
except:
retries -= 1
print('Invalid input')
raise ValueError()
def main():
try:
kms = miles_to_km(read_miles_retry('Miles? '))
print(kms)
except:
exit(1)
main()