首页 > 解决方案 > Python switch case,多值

问题描述

如何在python字典中执行多个值?

def func1():
    pass
def func2():
    pass
def func3():
    pass
def func4():


def main_menu():
    os.system('clear')
    print("\nWelcome, \n\n")
    print("1. First Question")
    print("2. Second Question")
    print("\n\n Type 'q' for Quit\n")
    choice = input(" >>  ").lower()
    if choice == '':
        main_menu()
    else:
        try:
            main_menus[choice]()
        except KeyError:
            print("Invalid selection, Please try again.\n")
            main_menu()
    return

main_menus = {
    '1' : func1, 
    '2' : func2, 
}

我希望main_menus键有两个值,例如这样

main_menus = {
    '1' : func1, func4
    '2' : func2, func3
}

所以,如果用户输入'1',它将func1首先执行,完成后,它将执行func4..我不能这样调用func4func1

def func1():
    return func4()

因为func1, 可能会被另一个main_menus键使用,并且会与func3..配对

如果可以的话,任何人都有解决方案,最好不要使用 for 循环。

谢谢

标签: pythonpython-3.x

解决方案


选项 1 使用评估

main_menus = {
    '1' : "func1(), func2()",
    '2' : "func2(), func3(),func4()"
}

try:
    eval(main_menus[choice])

整体代码变为:

import os

def func1():
  pass

def func2():
  pass

def func3():
  pass

def func4():
  pass

def main_menu():
  choice = ''
  while True:
    os.system('clear')
    print("\nWelcome, \n\n")
    print("1. First Question")
    print("2. Second Question")
    print("\n\n Type 'q' for Quit\n")

    choice = input(" >>  ").lower()
    if choice != 'q':
      try:
        eval(main_menus[choice])
      except KeyError:
          print("Invalid selection, Please try again.\n")
    else:
      break

  return


main_menus = {
    '1' : "func1(), func2()",
    '2' : "func2(), func3(),func4()"
}

main_menu()

选项 2——使用 For 循环

替换 main_menus 并尝试在上面的整体代码中使用:

main_menus = {
    '1' : [func1, func2],
    '2' : [func2, func3, func4]
}

try:
    for f in main_menus[choice]:
        f()

推荐阅读