关于循环:python 3 – 限制无效输入

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


MileToKm的退出路径更改为如下所示:

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()