三级菜单的程序实现

  1 #三级菜单的实现
  2 #将字典类型的数据存储到文本文件当中 str()
  3 #将文本文件当中的数据转化为原来的类型 eval()
  4 
  5 # 程序: 三级菜单
  6 # 要求:
  7 # 打印省、市、县三级菜单
  8 # 可返回上一级
  9 # 可随时退出程序
 10 menu = {
 11     '北京':{
 12         '海淀':{
 13             '五道口':{
 14                 'soho':{},
 15                 '网易':{},
 16                 'google':{}
 17             },
 18             '中关村':{
 19                 '爱奇艺':{},
 20                 '汽车之家':{},
 21                 'youku':{},
 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 while_flag = False
 58 #定义退出的表示位置:
 59 quit_flag = False
 60 while not while_flag and not quit_flag:
 61     for key in menu:
 62         print(key)
 63     choice = input(">>1 ").strip()
 64     if choice == "b":
 65         while_flag = True
 66     if choice =="q":
 67         quit_flag = True
 68         break #break之后就程序不会走else语句了
 69     if choice in menu:
 70         while not while_flag and not quit_flag:
 71             for key2 in menu[choice]:
 72                 print(key2)
 73             choice2 = input(">>2 ").strip()
 74             if choice2 == "b":
 75                 while_flag = True
 76             if choice2 =="q":
 77                 quit_flag = True
 78                 break #break之后就程序不会走else语句了
 79             if choice2 in menu[choice]:
 80                 while not while_flag and not quit_flag:
 81                     for key3 in menu[choice][choice2]:
 82                         print(key3)
 83                     choice3 = input(">>3 ").strip()
 84                     if choice3 == "b":
 85                         while_flag = True
 86                     if choice3 =="q":
 87                         quit_flag = True
 88                         break #break之后就程序不会走else语句了
 89                     if choice3 in menu[choice][choice2]:
 90                         while not while_flag and not quit_flag:
 91                             for key4 in menu[choice][choice2][choice3]:
 92                                 print(key4)
 93                             print("last level")
 94                             choice4 = input(">>4 ").strip()
 95                             if choice4 == "b":
 96                                 while_flag = True
 97                             if choice4 =="q":
 98                                 quit_flag = True
 99                                 break #break之后就程序不会走else语句了
100                         else:#上述语句当中没有break就会执行else循环的
101                              while_flag = False
102                 else:#上述语句当中没有break就会执行else循环的
103                      while_flag = False
104         else:#上述语句当中没有break就会执行else循环的
105              while_flag = False
106 else:#上述语句当中没有break就会执行else循环的
107     while_flag = False
108 #开始解决回退的问题
109 #思路是什么样子的:需要个标示位退出当前的while循环
110 
111 #现在开始解决程序的退出问题
112 #需要单独一个标示位表示程序的退出
113 #注意while break else的巧用
 1 #三级菜单的高级版实现:之前的实现有很多重复代码我们需要提取
 2 #思路 我们只需要每次遍历当前列表下的值,当前字典设备变量一直给赋值
 3 #定义当前的字典 初始值为menu
 4 current_layer = menu
 5 parent_layer =[]
 6 #遍历当前的字典
 7 #退回上级的实现 思路 定义个变量,每次将父级保存在变量里面
 8 while True:
 9     for key in current_layer:
10         print(key)
11     choice = input(">> ").strip()
12     if len(choice) == 0:continue
13     if choice in current_layer:
14         parent_layer.append(current_layer)#保存父级
15         current_layer = current_layer[choice]
16     elif choice == "b":
17         if parent_layer:
18             current_layer = parent_layer.pop()
19     elif choice == "q":
20         break
21     else:
22         print("无此项")

 

posted @ 2018-06-18 21:30  xiaodingzi  阅读(373)  评论(0编辑  收藏  举报