基于Python中的用户选择调用多个函数

时间:2018-03-23 17:26:15

标签: python python-3.x

我使用的是Python版本3。 我想根据用户输入调用一个函数,下面的代码工作正常。

def askUser():
    while True:
        try:
            choice = int(input("Do you want to: \n(1) Run f1 \n(2) Run f2 \n(3) Run f3 \n(4) Run f4 \n"))
        except ValueError:
            print("Please input a number")
            continue
        if 0 < choice < 5:
            break
        else:
            print("That is not between 1 and 4! Try again:")
    print ("You entered: {} ".format(choice))

    def f1():
        print("f1 was called")
    def f2():
        print("f2 was called")
    def f3():
        print("f3 was called")
    def f4():
        print("f4 was called")
    mydict = {1:f1, 2:f2, 3:f3, 4:f4}
    mydict[choice]()

askUser()

现在的问题是我想从用户那里获取多个值。例如,用户想要运行功能1和3(即第一个功能1然后是3个),所以他将输入以1,3分隔的值并将命中输入,将触发f1,然后触发f3。

我怎样才能做到这一点?

多个值不一定用逗号分隔,但用户应该能够一次性给出所有值,然后所有函数都应该以相同的顺序运行。

2 个答案:

答案 0 :(得分:1)

在列表中选择,查看以下代码是否适合您。

def askUser():
    def f1():
        print("f1 was called")
    def f2():
        print("f2 was called")
    def f3():
        print("f3 was called")
    def f4():
        print("f4 was called")
    mydict = {1:f1, 2:f2, 3:f3, 4:f4}

    while True:
        try:
            choices = list(map(int,input("Do you want to: \n(1) Run f1 \n(2) Run f2 \n(3) Run f3 \n(4) Run f4 \n").split()))
        except ValueError:
            print("Please input number")
            continue
        for choice in choices:
            if 0 < choice and choice < 5:
                mydict[choice]()
            else:
                print("That is not between 1 and 4! Try again:")




askUser()

以下是输出

sawant@sawant:~$ python sol.py 
Do you want to: 
(1) Run f1 
(2) Run f2 
(3) Run f3 
(4) Run f4 
1 2 3
f1 was called
f2 was called
f3 was called
Do you want to: 
(1) Run f1 
(2) Run f2 
(3) Run f3 
(4) Run f4 
4 3 2
f4 was called
f3 was called
f2 was called
Do you want to: 
(1) Run f1 
(2) Run f2 
(3) Run f3 
(4) Run f4 
1 5
f1 was called
That is not between 1 and 4! Try again:
Do you want to: 
(1) Run f1 
(2) Run f2 
(3) Run f3 
(4) Run f4 
1 9 2 
f1 was called
That is not between 1 and 4! Try again:
f2 was called
Do you want to: 
(1) Run f1 
(2) Run f2 
(3) Run f3 
(4) Run f4 
1 .
Please input number
Do you want to: 
(1) Run f1 
(2) Run f2 
(3) Run f3 
(4) Run f4 

答案 1 :(得分:0)

您可以使用data.split函数执行此操作,然后运行循环

data = input.split(",") #split string into a list
for temp in data:
   mydict[temp]();

让我知道这有帮助