Python三级菜单

python学习网 2017-09-13 09:10:01

要求:

  1. 打印省、市、县三级菜单
  2. 可返回上一级
  3. 可随时退出程序

版本1

 1 # _author : Ahern Li
 2 # @_date  : 2017/9/12
 3 
 4 menu = {
 5     '浙江省':{
 6         '杭州市':{
 7             '余杭区':{'中泰':{},'临平':{}},
 8             '西湖区':{'西湖':{},'留下':{}}
 9             },
10         '温州市':{
11             '苍南县':{'灵溪':{},'龙港':{}},
12             '瑞安县':{'安阳':{},'锦湖':{}}
13             }
14         },
15     '广东省':{
16         '广州市':{
17             '越秀区':{'人民路':{},'北京路':{}},
18             '荔湾区':{'沙面':{},'龙津':{}}
19             },
20         '珠海市':{
21             '香洲区':{'拱北':{},'吉大':{}},
22             '金湾区':{'红旗镇':{},'平沙镇':{}}
23             }
24         }
25     }
26 
27 # 返回标记
28 q_flag = True
29 # 退出标记
30 Q_flag = True
31 # 返回,退出标记出现False退出循环
32 while q_flag and Q_flag:
33     # 遍历打印省份
34     for i in menu:
35         print(i)
36     province = input('请输入要查找的省份(Q,退出):').strip()
37     if province in menu:
38         while q_flag and Q_flag:
39             for i in menu[province]:
40                 print(i)
41             city = input('请输入要查找的市(q,返回 或 Q,退出):').strip()
42             if city in menu[province]:
43                 while q_flag and Q_flag:
44                     for i in menu[province][city]:
45                         print(i)
46                     county = input('请输入要查找的区或县(q,返回 或 Q,退出):').strip()
47                     if county in menu[province][city]:
48                         while q_flag and Q_flag:
49                             for i in menu[province][city][county]:
50                                 print(i)
51                             # 提示最后一页,输入格式
52                             choice = input('最后一页! q,返回 或 Q,退出:').strip()
53                             if choice == 'q':
54                                 # 配合 else: q_flag = True 退出该层循环,返回上层循环
55                                 q_flag = False
56                             elif choice == 'Q':
57                                 # 退出大循环
58                                 Q_flag = False
59                             else:
60                                 # 提示输入不合法
61                                 print('输入错误!')
62                         # 改回 q_flag 的值,实现只退出一层循环
63                         else:
64                             q_flag = True
65                     elif county == 'q':
66                         q_flag = False
67                     elif county == 'Q':
68                         Q_flag = False
69                     else:
70                         print('输入错误!')
71                 else:
72                     q_flag = True
73             elif city == 'q':
74                 q_flag = False
75             elif city == 'Q':
76                 Q_flag = False
77             else:
78                 print('输入错误!')
79         else:
80             q_flag = True
81     elif province == 'Q':
82         Q_flag = False
83     else:
84         print('输入错误!')

 

版本2

 1 # _author : Ahern Li
 2 # @_date  : 2017/9/12
 3 
 4 menu = {
 5     '浙江省':{
 6         '杭州市':{
 7             '余杭区':{'中泰':{},'临平':{}},
 8             '西湖区':{'西湖':{},'留下':{}}
 9             },
10         '温州市':{
11             '苍南县':{'灵溪':{},'龙港':{}},
12             '瑞安县':{'安阳':{},'锦湖':{}}
13             }
14         },
15     '广东省':{
16         '广州市':{
17             '越秀区':{'人民路':{},'北京路':{}},
18             '荔湾区':{'沙面':{},'龙津':{}}
19             },
20         '珠海市':{
21             '香洲区':{'拱北':{},'吉大':{}},
22             '金湾区':{'红旗镇':{},'平沙镇':{}}
23             }
24         }
25     }
26 
27 current_layer = menu    # 实现动态循环
28 parent_layer = []   # 保留所有父层,最后一个元素永远为父层
29 
30 while True:
31     print() # 仅为了打印美观
32     for i in current_layer:     # 遍历打印地址
33         print(i)
34     choice = input('请在下方输入查询地址\n>>>:').strip()
35     if choice in current_layer:
36         if current_layer[choice]:   # 判断是否为末层
37             parent_layer.append(current_layer)  # 进入子层前,添加当前层作为父层
38             current_layer = current_layer[choice]   # 修改子层
39         else:
40             print('当前是最后一页')
41     elif choice == '':
42         continue
43     elif choice == 'q':     # 返回上层
44         if parent_layer:    # 判断 parent_layer 是否为空
45             current_layer = parent_layer.pop()  # 取出当前层父层
46     # 退出循环
47     elif choice == 'Q':
48         break
49     else:
50         print('输入错误!')

 

阅读(766) 评论(0)