python 3 - limiting invalid inputs
我试图在程序关闭之前限制无效输入的数量。 所以如果输入无效,我需要程序循环回原始输入问题。 我的尝试限制是3。
我不确定使用什么语法或我应该如何构造它。
下面是我的代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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
将
1 2 3 4 5 6 | if mile_conv > min_mile : print ('The result would be', format(mile_conv,'.2f'),'kilometers.') return True else: return False |
然后包装你的函数来处理重试:
1 2 3 4 5 6 7 8 9 10 | def TryMileToKm(): attempts = 0 while attempts < 3: attempts += 1 if MileToKm(): break if attempts >= 3: print 'Invalid input' exit(1) |
这不是最惯用的方式,但我试图保持意图明显。
编辑很好,这里是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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() |