python-三级菜单的优化实现

三级菜单需求:
1.可依次选择进入各子菜单
2.可从任意一层往回退到上一层
3.可从任意一层退出程序
所需新知识点:列表、字典

  先通过字典建立数据结构

  1 #创建字典
  2 city_dic = {
  3     "北京":{
  4         "海淀区": {
  5             "人大附中":{
  6                 "足球":{},
  7                 "篮球":{},
  8                 "排球":{},
  9             },
 10 
 11             "十一学校":{
 12                 "足球":{},
 13                 "篮球":{},
 14                 "排球":{},
 15             },
 16             "育英学校":{
 17                 "足球":{},
 18                 "篮球":{},
 19                 "排球":{},
 20             },
 21         },
 22         "西城区":{
 23             "北师大附中":{
 24                 "足球":{},
 25                 "篮球":{},
 26                 "排球":{},
 27             },
 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                 "排球":{},
 62             },
 63             "7中":{
 64                 "足球":{},
 65                 "篮球":{},
 66                 "排球":{},
 67             },
 68             "9中":{
 69                 "足球":{},
 70                 "篮球":{},
 71                 "排球":{},
 72             },
 73 
 74         },
 75     },
 76     "上海":{
 77         "黄埔区":{
 78             "3中":{
 79                 "足球":{},
 80                 "篮球":{},
 81                 "排球":{},
 82             },
 83             "4中": {
 84                 "足球":{},
 85                 "篮球":{},
 86                 "排球":{},
 87             },
 88             "5中": {
 89                 "足球":{},
 90                 "篮球":{},
 91                 "排球":{},
 92             },
 93         },
 94         "徐汇区":{
 95             "6中": {
 96                 "足球":{},
 97                 "篮球":{},
 98                 "排球":{},
 99             },
100             "7中": {
101                 "足球":{},
102                 "篮球":{},
103                 "排球":{},
104             },
105             "8中": {
106                 "足球":{},
107                 "篮球":{},
108                 "排球":{},
109             },
110         },
111         "长宁区":{
112             "9中": {
113                 "足球":{},
114                 "篮球":{},
115                 "排球":{},
116             },
117             "10中": {
118                 "足球":{},
119                 "篮球":{},
120                 "排球":{},
121             },
122             "11中": {
123                 "足球":{},
124                 "篮球":{},
125                 "排球":{},
126             },
127         },
128     },
129     "黑龙江":{
130         "哈尔滨":{
131             "1中": {
132                 "足球":{},
133                 "篮球":{},
134                 "排球":{},
135             },
136             "2中":{
137                 "足球":{},
138                 "篮球":{},
139                 "排球":{},
140             },
141             "3中": {
142                 "足球":{},
143                 "篮球":{},
144                 "排球":{},
145             },
146         },
147         "大庆":{
148             "4中":{
149                 "足球":{},
150                 "篮球":{},
151                 "排球":{},
152             },
153             "5中": {
154                 "足球":{},
155                 "篮球":{},
156                 "排球":{},
157             },
158             "6中": {
159                 "足球":{},
160                 "篮球":{},
161                 "排球":{},
162             },
163         },
164         "牡丹江":{
165             "7中":{
166                 "足球":{},
167                 "篮球":{},
168                 "排球":{},
169             },
170             "8中": {
171                 "足球":{},
172                 "篮球":{},
173                 "排球":{},
174             },
175             "9中": {
176                 "足球":{},
177                 "篮球":{},
178                 "排球":{},
179             },
180         },
181         "佳木斯":{
182             "10中": {
183                 "足球":{},
184                 "篮球":{},
185                 "排球":{},
186             },
187             "11中": {
188                 "足球":{},
189                 "篮球":{},
190                 "排球":{},
191             },
192             "12中": {
193                 "足球":{},
194                 "篮球":{},
195                 "排球":{},
196             },
197         },
198     },
199 }


优化版实现代码:15行
 1 current_layer = city_dic #当前层
 2 last_layers = [city_dic]    #把当前层赋值给列表,方便退出时使用
 3 while True:
 4     #循环打印字典列表key
 5     for key in current_layer:
 6         print(key)
 7     choice = input(">>>:").strip()    #等待用户输入
 8     if choice == "0": continue     #判断是否为空,为空则continue,
 9     if choice in current_layer:   #进入下一层
10         last_layers.append(current_layer)  #把当前层添加到列表
11         current_layer = current_layer[choice]    #当前层变为选择choice的下一层
12     if choice == "b":
13         if last_layers:
14             current_layer = last_layers[-1]     #从列表中取到最后一个值,即循环的上一层,赋值给current_layer
15             last_layers.pop()                   #取完列表中最后一个值后,要把它从列表中删除,pop()默认删除列表中最后一个,也可以写成pop(-1)
16     if choice == "q": break # 如果输入q,结束程序。

猜你喜欢

转载自www.cnblogs.com/cyhv5/p/8995935.html