1 #功能要求(列表、菜单):
2 #现有省、市、县三级结构,要求程序启动后,允许用户可依次选择进入各子菜单
3 #可从任意一级菜单往回上一级
4 #可从任意一级菜单退出程序
5 menu = {
6 '河北省':{
7 '石家庄市':{
8 '元氏县':{
9 '苏阳乡':{ },
10 '赵同乡':{ }
11 },
12 '赞皇县':{
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 },
44 '左云县': {
45 '保安堡': { }
46 }
47 }
48 }
49 }
50 stay_flag = False # 标志位,控制while循环 当用户输入某个字符时停留在本级菜单上
51 return_flag = False # 标志位,控制while循环 当用户输入某个字符时返回上一级菜单上
52 flag_list = ['s','r']
53 while not return_flag:
54 print("您可以选择的省份:")
55 print("*******************************")
56 for k in menu:
57 print(k)
58 print("*******************************")
59 choicename = input("请输入您所在的省份(s跳出程序;r返回上一级菜单):").strip() #strip 去掉多余的空格、换行、Tab键
60 print("*******************************")
61
62 if choicename in menu:
63 while not stay_flag and not return_flag:
64 for k1 in menu[choicename]:
65 print(k1)
66 print("*******************************")
67 choicename1 = input("请输入您所在的市区(s跳出程序;b返回上一级菜单):").strip()
68 print("*******************************")
69 if choicename1 == 's': # 当输入的是s时,跳出程序
70 exit()
71 elif choicename1 == 'r': # 当输入r时,将return_flag标志置为True,本循环层不开始,返回上一层
72 return_flag = True
73
74 if choicename1 in menu[choicename]:
75 while not stay_flag and not return_flag:
76 for k2 in menu[choicename][choicename1]:
77 print(k2)
78 print("*******************************")
79 choicename2 = input("请输入您所在的县(s跳出程序;r返回上一级菜单):").strip()
80 print("*******************************")
81 if choicename2 == 's':
82 exit()
83 elif choicename2 == 'r':
84 return_flag = True
85
86 if choicename2 in menu[choicename][choicename1]:
87 while not stay_flag and not return_flag:
88 for k3 in menu[choicename][choicename1][choicename2]:
89 print(k3)
90 print("*******************************")
91 choicename3 = input("请输入s或r(s跳出程序;r返回上一级菜单):").strip()
92 print("*******************************")
93 if choicename3 == 's':
94 exit()
95 elif choicename3 == 'r':
96 return_flag = True
97 else:
98 print("这是最后一级")
99 else: # 给return_flag标志位重新赋值为False,确保第三级菜单可以正常循环
100 return_flag = False
101 elif choicename2 in flag_list: # 避免输入s或b,程序停在当前菜单层或返回上级菜单层时提示错误,请重新输入。
102 pass
103 else:
104 print("县名输入错误,请重新输入")
105
106 else: #给return_flag标志位重新赋值为False,确保第二级菜单可以正常循环
107 return_flag = False
108 elif choicename1 in flag_list:
109 pass
110 else:
111 print("市名输入错误,请重新输入")
112
113 else: # 给return_flag标志位重新赋值为False,确保第一级菜单可以正常循环
114 return_flag = False
115 elif choicename in flag_list:
116 pass
117 else:
118 print("省名输入错误,请重新输入!")