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("无此项")