3 回答
TA贡献1887条经验 获得超5个赞
添加带有函数名称的嵌套字典:
calculus = {
'1': {'Name': 'Calculus 1', 'Function': cal1},
'2': {'Name': 'Calculus 2', 'Function': cal2},
'3': {'Name': 'Calculus 3', 'Function': cal3}
}
然后修改你的循环:
for key, item in calculus.items():
print(key,":", item.get('Name'))
eq_id = input("Enter desired equation function id: ")
# eq_arg = input("Press Enter") # <--- (You don't need this)
calculus.get(key).get('Function')()
您也可以使用嵌套的lists 代替,['Calculus 1', cal1]但可能更难分辨它calculus['1'][0]是名称calculus['1'][1]还是函数。
如果您只关心一个根据出现顺序递增的通用函数名称,那么它就更简单了:
for item in (calculus.keys()):
print(item,":", 'Calculus {}'.format(item)))
eq_id = input("Enter desired equation function id: ")
calculus.get(eq_id)()
TA贡献1786条经验 获得超13个赞
看起来您在这里想要的是一个嵌套字典,其中顶级键是“Physics”和“Calculus”,然后每个的值将是您已经指定的字典。
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)
正如提到的评论之一,最好将字典键设为小写,然后将所有输入转换为小写。
TA贡献1802条经验 获得超10个赞
最简单的事情是,以下内容:
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)
添加回答
举报