多级菜单的技巧与逻辑

menu = {
'北京': {
'海淀': {
'五道口': {
'soho': {},
'网易': {},
'google': {}
},
'中关村': {
'爱奇艺': {},
'汽车之家': {},
'youku': {},
},
'上地': {
'百度': {},
},
},
'昌平': {
'沙河': {
'老男孩': {},
'北航': {},
},
'天通苑': {},
'回龙观': {},
},
'朝阳': {},
'东城': {},
},
'上海': {
'闵行': {
"人民广场": {
'炸鸡店': {}
}
},
'闸北': {
'火车战': {
'携程': {}
}
},
'浦东': {},
},
'山东': {},
}
方法一:需要用户输入汉字;用了get方法。
def menu_func(menu):
while True:
for name in menu:
print(name)
key = input('>>>').strip() # 北京
if menu.get(key): #get方法只有字典才有,故如果menu字典中嵌套有列表,该方法就可能报错。
dic = menu[key]
flag = menu_func(dic) # menu_func(menu['北京'])
if not flag: return False #
elif key.upper() == 'B': return True
elif key.upper() == 'Q': return False

menu_func(menu)

方法二:只需要输入数字就可以了。
def menu_func(menu):
while True:
for index,name in enumerate(menu,1): #使用枚举函数遍历字典的键。
print(index, name)
print("请选择要查询城市前的数字, 如要返回,请输入'b'或'B', 如要退出,请输入‘q'或'Q'.")
key = input('>>>').strip()
if key.isdigit(): #判断是否是纯数字。key不能强转。
if int(key) in range(1,4): #此处key必须强转为int.
city = list(menu.keys())[int(key)-1] #获取城市编号对应的城市。
dic = menu[city]
flag = menu_func(dic)
if not flag: return False
elif key.upper() == 'B': return True
elif key.upper() == 'Q': return False




知识:字典的get方法。注意:列表没有这个方法。
        # 如:dict.get(k,d) 其中 get相当于一条if...else...语句,参数k在字典中,字典将返回dict[k];如果参数k不在字典中则返回参数d,如果K在字典中则返回k对应的value值
        # dic = {5:2,3:4}
        # print dic.get(3,0)返回的值是4;
        # Print dic.get(1,0)返回值是0;
原文地址:https://www.cnblogs.com/qqq789001/p/13363912.html