如果用户输入无效,则重新启动用户输入功能

时间:2018-10-28 01:10:22

标签: python-3.x if-statement user-defined-functions

我对Python和编程非常陌生。

我一直在浏览如何执行此操作,如果来自用户的输入无效,则重新启动用户定义的函数,并且我遇到的大多数答案都是while循环的功能,我似乎无法正确实现该功能我的代码。

我的代码如下:

mchoices = input('Enter A or B or C or D or E or F: ')
def getRate(choices):
    if choices ==  'A':
        return 'Rate = ' + str(options[0]) + '%'
    elif choices == 'B':
        return 'Rate = ' + str(options[1]) + '%'
    elif choices == 'C':
        return 'Rate = ' + str(options[2]) + '%'
    elif choices == 'D':
        return 'Rate = ' + str(options[3]) + '%'
    elif choices == 'E':
        return 'Rate = ' + str(options[4]) + '%'
    elif choices == 'F':
        return 'Rate = ' + str(options[5]) + '%'
    else:
        return 'Please enter a valid option'
print(getRate(mchoices))

options等于范围(1,20)和radint(2,6),我认为这与我的问题无关,但是如果您对它的含义感到困惑,我想提一下。如果相关的话,我也会把那部分代码也放进去。

我遇到的主要问题是,在代码的“其他”部分的最下方,使其返回“请输入有效选项”。我也希望它重新启动程序,以便用户可以执行其他输入。

我希望答案可以使用while循环来完成某件事,这很好,我似乎无法自己完成。

1 个答案:

答案 0 :(得分:0)

定义一种获取用户输入的方法。

$ cat askuser.py
#!/usr/bin/python3

# here's you getRate() method.

def getRate(choices):
    # I can only guess at what options is meant to be.
    options = [10,20,30,40,50,60]
    if choices ==  'A':
        return 'Rate = ' + str(options[0]) + '%'
    elif choices == 'B':
        return 'Rate = ' + str(options[1]) + '%'
    elif choices == 'C':
        return 'Rate = ' + str(options[2]) + '%'
    elif choices == 'D':
        return 'Rate = ' + str(options[3]) + '%'
    elif choices == 'E':
        return 'Rate = ' + str(options[4]) + '%'
    elif choices == 'F':
        return 'Rate = ' + str(options[5]) + '%'
    else:
        return 'Please enter a valid option'

def ask():
    user_input = 'None'
    while user_input not in ['A','B','C','D','E','F']:
        user_input = input("Enter A, B, C, D or E: ")
    return(user_input)

# voila!
print(getRate(ask())

在运行此脚本时会发生以下情况:

$ ./askuser.py
Enter A, B, C, D or E: i
Enter A, B, C, D or E: 0
Enter A, B, C, D or E: XXXXX
Enter A, B, C, D or E: e
Enter A, B, C, D or E: E
Rate = 50%