字典三级菜单

第一种  多层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 }
View Code
 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
View Code

第二种   函数嵌套

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
View Code

第三种,列表循环

 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)
View Code
原文地址:https://www.cnblogs.com/zhengyiqun1992/p/9994564.html