[英]Calling Multiple Functions based on user selection in Python
我正在使用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分隔的值,然后按Enter,将触发f1,然后触发f3。
我该如何实现?
多个值不必一定要用逗号分隔,但是用户应该能够一次给出所有值,然后所有功能应以相同的顺序运行。
在列表中进行选择,看看下面的代码是否适合您。
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
您可以使用data.split函数执行此操作,然后在周围运行一个循环
data = input.split(",") #split string into a list
for temp in data:
mydict[temp]();
让我知道有帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.