有没有办法选择一个字典,然后从字典中选择一个函数?

2024-05-14 20:54:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过用户输入选择一个字典,并从中选择所选字典中列出的要运行的函数。我的代码目前的情况是,它将正确地选择正确的字典,但在选择函数时,它将在输入所需的函数id时工作,但对所选字典中的每个条目重复。我需要做什么来解决这个问题

实际定义的函数只是在测试/调试时打印一个随机数作为占位符。另外,为了在测试/调试时简单起见,我将函数留在它们的十六进制内存位置

calculus = {
  '1': cal1,
  '2': cal2,
  '3': cal3,
  }
physics = {
  '1': phy1,
  '2': phy2,
  '3': phy3,
  }

def Main():
  a = input("Choose equation set. Calculus or Physics: ")
  if a == "Calculus":
    for item in (calculus.keys()):
      print(item,":",calculus.get(item,'-'))
      eq_id = input("Enter desired equation function id: ")
      eq_arg = input("Press Enter")
      calculus[eq_id](eq_arg)
  elif a == "Physics":
    for item in (physics.keys()):
      print(item,":",physics.get(item,'-'))
      ph_id = input("Enter desired equation id: ")
      ph_arg = input("Press Enter")
      physics[ph_id](ph_arg)

下面是一个输出给我的示例:(User input in“”,function name in“”,output in“”)

选择公式集。微积分或物理学:“物理学”
1:(0x7f32a527c6a8处的函数phy1)
输入所需的公式id:“1”
按Enter键
“‘347’”
2:(0x7f32a527c730处的函数phy2)
输入所需的公式id:“3”
按Enter键
“540”
3:(0x7f32a527c7b8处的函数phy3)
输入所需的公式id:“2”
按Enter键
“429”

但我希望它更像这样:

选择公式集。微积分或物理学:“物理学”
1:'物理1'
2:'物理2'
3:'物理3'
输入所需的公式id:“2”
'执行所选函数'


Tags: 函数inidinput字典argitemph
3条回答

这里您需要的似乎是一个嵌套字典,其中顶级键是“Physics”和“calcular”,然后每个键的值将是您已经指定的字典

formulas = { "Calculus" : 
               {
                   '1': cal1,
                   '2': cal2,
                   '3': cal3,
                },
             "Physics" : 
                {
                   '1': phy1,
                   '2': phy2,
                   '3': phy3,
                }
           }

这样您就可以在同一个函数中完成所有输入

a = input("Choose equation set. Calculus or Physics: ")
formula_set = forumlas[a]
for key in forumla_set.keys():
  print("{}: {} {}".format(key, a, key)

eq_id = input("Enter desired equation function id: ")
eq_arg = input("Press Enter")
formula_set[eq_id](eq_arg)

正如前面提到的注释之一,最好将字典键设置为小写,然后将所有输入转换为小写

最简单的方法是:

calculus = {
  '1': calculus_1,
  '2': calculus_2,
  '3': calculus_3,
  }
physics = {
  '1': physics_1,
  '2': physics_2,
  '3': physcis_3,
  }

def Main():
  a = input("Choose equation set. Calculus or Physics: ")
  if a == "Calculus":
    for item in (calculus.keys()):
      # I'm using the __name__ attribute on the function handle
      print(item,":",calculus.get(item,'-').__name__)
      eq_id = input("Enter desired equation function id: ")
      eq_arg = input("Press Enter")
      calculus[eq_id](eq_arg)
  elif a == "Physics":
    for item in (physics.keys()):
      print(item,":",physics.get(item,'-').__name__) # i'm using the __name__ attribute on the function handle
      ph_id = input("Enter desired equation id: ")
      ph_arg = input("Press Enter")
      physics[ph_id](ph_arg)

但我建议,您将数据结构更改为以下内容:

calculus = {
      '1': {
             'func_name': 'calculus 1',
             'func': calculus_1 # where calculus_1 is the function handle
           },
      '2': {
                 'func_name': 'calculus 2',
                 'func': calculus_2 # where calculus_2 is the function handle
               },
      '3': {
                 'func_name': 'calculus 3',
                 'func': calculus_3 # where calculus_3 is the function handle
          }
    }

然后访问它,比如

for item in (calculus.keys()):
    print(item,":",calculus.get(item,'-')['func_name'])
    ...
    calculus[eq_id]['func'](eq_arg)

您可以尝试以下方法:

def cal1():
    print ("Cal1")

def cal2():
    print ("Cal2")

def cal3():
    print ("Cal3")

def phy1():
    print ("phy1")

def phy2():
    print ("phy2")

def phy3():
    print ("phy3")

calculus = {
  1: cal1,
  2: cal2,
  3: cal3,
  }
physics = {
  1: phy1,
  2: phy2,
  3: phy3,
  }

def main():
    a = input("Choose equation set. Calculus or Physics: ")
    if a == "Calculus":
        for item in calculus.keys():
            print(item,":",calculus[item].__name__)
        eq_id = input("Enter desired equation function id: ")
        calculus[eq_id]()

    elif a == "Physics":
        for item in physics.keys():
            print(item,":",physics[item].__name__)
        ph_id = input("Enter desired equation id: ")
        physics[ph_id]()

main()

输出:

Choose equation set. Calculus or Physics: "Calculus"
(1, ':', 'cal1')
(2, ':', 'cal2')
(3, ':', 'cal3')
Enter desired equation function id: 1
Cal1

相关问题 更多 >

    热门问题