python 3 - 限制无效输入

时间:2014-03-01 21:51:34

标签: python loops syntax python-3.3

我试图在程序关闭之前限制无效输入的数量。所以如果输入无效,我需要程序循环回原始输入问题。我的尝试限制是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

1 个答案:

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