遍历三级菜单--牛掰版本

 1 需求:
 2 可依次选择进入各子菜单
 3 可从任意一层往回退到上一层
 4 可从任意一层退出程序
 5 所需新知识点:列表、字典
 6 '''
 7 '''
 8 思路:
 9 1、菜单是分层的,进入每一层的方法一样:
10 用一个新的字典动态的表示当前层,遍历显示当前层,输入选择,判断进入下一层
11 2、用一个列表记录父层,当判断为返回时取出再次进入
12 3、进入下一层前需要把当当前成存档父层列表中,再把当前成换成选择的子层
13 4、遍历具有层级的字典都需要注意边界问题,有没有下一层、上一层
14 5、知识点:判断语句中空就是假,字典value空、列表空等,
15 '''
16 menu = {
17     '北京':{
18         '海淀':{
19             '五道口':{
20                 'soho':{},
21                 '网易':{},
22                 'google':{}
23             },
24             '中关村':{
25                 '爱奇艺':{},
26                 '汽车之家':{},
27                 'youku':{},
28             },
29             '上地':{
30                 '百度':{},
31             },
32         },
33         '昌平':{
34             '沙河':{
35                 '老男孩':{},
36                 '北航':{},
37             },
38             '天通苑':{},
39             '回龙观':{},
40         },
41         '朝阳':{},
42         '东城':{},
43     },
44     '上海':{
45         '闵行':{
46             "人民广场":{
47                 '炸鸡店':{}
48             }
49         },
50         '闸北':{
51             '火车战':{
52                 '携程':{}
53             }
54         },
55         '浦东':{},
56     },
57     '山东':{},
58 }
59 
60 
61 if __name__ == '__main__':
62     #实现动态循环
63     current_layer = menu
64     #记录父层,最后一个总是当前层的父层
65     parrent_layer = []
66     while True:
67         #遍历打印当前层,打印当前字典的keys
68         for i in current_layer:
69             print(i)
70         #获取输入
71         choice = input("请输入您的选择(返回输入b,退出输入q):").strip()
72         #判断输入的选择是否在当前层
73         if choice in current_layer:
74             #判断下一层是否为空,为空则表示已经最后一层了
75             if current_layer[choice]:
76                 #进入子层前,把当前层作为父层,便于后面使用
77                 parrent_layer.append(current_layer)
78                 #把当前层换成进入后的子层
79                 current_layer = current_layer[choice]
80             else:
81                 print("已经是最后一层了!")
82                 break
83 
84         elif choice== 'b':
85             #如果paarent_layer为空,则表示是第一层,无父层
86             if parrent_layer:
87                 current_layer = parrent_layer.pop()
88 
89         elif choice== 'q':
90             break
91         else:
92             print("输入错误!")

猜你喜欢

转载自www.cnblogs.com/lidaxiong/p/9059659.html