三级菜单需求:
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,结束程序。