• 字典三级菜单


    第一种  多层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
  • 相关阅读:
    c11---位运算相关
    c10---多文件开发
    C9---include,编译
    c8---递归
    c7---函数
    c6----函数的声明和实现
    c5
    Arm 环境上面libgdiplus的简单安装配置
    批量查找可执行文件目录的简单方法
    Android常用工具类
  • 原文地址:https://www.cnblogs.com/zhengyiqun1992/p/9994564.html
Copyright © 2020-2023  润新知