第一种 多层while 循环方法

1 menu = { 2 '北京':{ 3 '海淀':{ 4 '五道口':{ 5 'soho':{}, 6 '网易':{}, 7 'google':{} 8 }, 9 '中关村':{ 10 '爱奇艺':{}, 11 '汽车之家':{}, 12 'youku':{}, 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 }

1 brk_flag = True #标记 2 while brk_flag: 3 for i in menu: 4 print(i) 5 ch = input('1请输入城市名字,或者按q退出').strip() 6 if ch != 'q' and ch != 'b': 7 if menu.get(ch) and menu[ch].values(): #判断输入的这个城市是否存在和判断是不是最后一层 8 for i in menu[ch]: #循环遍历,打印 9 print(i) 10 while brk_flag: # 第二层循环 11 ch2 = input('2请输入城市名称,按b返回上层,或者q退出').strip() 12 if ch2 != 'q' and ch2 != 'b': 13 if menu[ch].get(ch2) and menu[ch][ch2].values(): 14 for i in menu[ch][ch2]: 15 print(i) 16 while brk_flag: #第三层循环 17 ch3 = input('3请输入城市名称,按b返回上层,或者q退出').strip() 18 if ch3 != 'q' and ch3 != 'b': 19 if menu[ch][ch2].get(ch3) and menu[ch][ch2][ch3].values(): 20 for i in menu[ch][ch2][ch3]: 21 print(i) 22 while brk_flag:#第四层循环 23 ch4 = input('4请输入城市名称,按b返回上层,或者q退出').strip() 24 if ch4 != 'q' and ch4 != 'b': 25 if menu[ch][ch2][ch3].get(ch4) and menu[ch][ch2][ch3][ch4].values(): 26 for i in menu[ch][ch2][ch3][ch4]: 27 print(i) 28 elif menu[ch][ch2][ch3].get(ch4) == None: 29 print('输入错误,重新输入') 30 for i in menu[ch][ch2][ch3]: 31 print(i) 32 continue 33 else: 34 print(f'该{ch4}目录是底部,请重新输入') 35 for i in menu[ch][ch2][ch3]: 36 print(i) 37 continue 38 elif ch4 == 'q': 39 brk_flag = True 40 else: 41 for i in menu[ch][ch2]: 42 print(i) 43 break 44 45 elif menu[ch][ch2].get(ch3) == None: 46 print('输入错误,重新输入') 47 for i in menu[ch][ch2]: 48 print(i) 49 continue 50 else: 51 print(f'该{ch3}目录是底部,请重新输入') 52 for i in menu[ch][ch2]: 53 print(i) 54 continue 55 elif ch3 == 'q': 56 brk_flag = False 57 else: 58 for i in menu[ch]: 59 print(i) 60 break 61 elif menu[ch].get(ch2) == None : 62 print('输入错误,重新输入') 63 for i in menu[ch]: 64 print(i) 65 continue 66 else: 67 print(f'该{ch2}目录是底部,请重新输入') 68 for i in menu[ch]: 69 print(i) 70 continue 71 elif ch2 == 'q': 72 brk_flag = False 73 else: 74 break 75 elif menu.get(ch) == None: #输入的不存在,继续循环要求输入 76 print('输入错误,重新输入') 77 continue 78 else: 79 print(f'该{ch}目录到底了,请重新输入') 80 continue 81 elif ch == 'b': 82 print('该城是顶层,不支持返回,请重新输入') 83 continue 84 else: 85 break
第二种 函数嵌套

def con():# 进入字典 for i in menu: print(i) ch = input('1请输入城市名称,或者按q退出:').strip() if ch != 'q' and ch != 'b': if menu.get(ch) and menu[ch].values(): #判断该值是否存在以及该值目录下面还有没有 def con1(): #通过函数嵌套再次进入循环。(第一层) for i in menu[ch]: print(i) ch2 = input('2请输入名称,按b返回上层目录,或者按q退出:').strip() if ch2 != 'q' and ch2 != 'b': if menu[ch].get(ch2) and menu[ch][ch2].values(): def con2():#(第二层) for i in menu[ch][ch2]: print(i) ch3 = input('3请输入名称,按b返回上层目录,或者按q退出:').strip() if ch3 != 'q' and ch3 != 'b': if menu[ch][ch2].get(ch3) and menu[ch][ch2][ch3].values(): def con3():#(第三层) for i in menu[ch][ch2][ch3]: print(i) ch4 = input('4请输入名称,按b返回上层目录,或者按q退出:') if ch4 != 'q' and ch4 != 'b': if menu[ch][ch2][ch3].get(ch4) and menu[ch][ch2][ch3][ch4].values(): def con4():#(第四层) for i in menu[ch][ch2][ch3][ch4]: print(i) con4() elif menu[ch][ch2][ch3].get(ch4) == None: print('输入错误,重新输入') con3() else: print(f'该{ch4}目录到底了,请重新输入') con3() elif ch4 == 'b': con2() else: return con3() elif menu[ch][ch2].get(ch3) == None: print('输入有误,请重新输入') con2() else: print(f'该{ch3}目录到底了,请重新输入') con2() elif ch3 == 'b': con1() else: return con2() elif menu[ch].get(ch2) == None: print('输入有误,请重新输入') con1() else: print(f'该{ch2}目录到底了,请重新输入') con1() elif ch2 == 'b': con() else: return con1() elif menu.get(ch) == None: #如果该值不存在,提示重新输入,调用该层函数 print('输入有误,请重新输入') con() else: #如果判断该目录下面为空,则提示重新输入 print(f'该{ch}目录到底了,请重新输入') con() elif ch == 'b': print('目录到顶层了') con() else: return while True: con() break
第三种,列表循环

1 current_layer = menu 2 # 将字典存入列表中 3 layer = [] 4 while True: 5 for i in current_layer: 6 print(i) 7 choice = input('请输入城市').strip() 8 if not choice: 9 continue 10 if choice in current_layer: 11 if current_layer[choice].values(): 12 layer.append(current_layer) 13 current_layer = current_layer[choice] 14 else: 15 print('目录到底了,重新输入') 16 time.sleep(0.5) 17 elif choice == 'q': 18 break 19 elif choice == 'b': 20 if not layer: 21 print('顶部,重新输入') 22 time.sleep(0.5) 23 else: 24 current_layer = layer.pop(-1) 25 else: 26 print('输入错误,重新输入') 27 time.sleep(0.5)