python3 实现一个多级菜单小功能
记录下一下
1 #!/usr/bin/env python3
2 '''
3 需求:三级菜单
4 三级菜单,依次进入子菜单
5 '''
6 City = {
7 '北京':{
8 '大兴区':[
9 '亦庄','黄村','中信新城','B返回','Q退出'
10 ],
11 '丰台区':[
12 '岳各庄','五棵松','丰台路口','B返回','Q退出'
13 ],
14 '朝阳区':[
15 '劲松','双井','国贸','B返回','Q退出'
16 ],
17 'B返回':'返回',
18 'Q退出':'退出'
19 },
20 '上海':{
21 '浦东区':[
22 '世纪大道','陆家嘴','盛世年华','B返回','Q退出'
23 ],
24 '普陀区':[
25 '东方汽配城','金沙社区','东锦国际大厦','B返回','Q退出'
26 ],
27 '徐汇区':[
28 '上海应用技术大学','上海长途客运南站','上海东方体育中心','B返回','Q退出'
29 ],
30 'B返回': '返回',
31 'Q退出': '退出'
32 },
33 '广州':{
34 '天河区':[
35 '珠江公园','天河体育场','广东师范大学','B返回','Q退出'
36 ],
37 '白云区':[
38 '广州体育馆','白云文化广场','广州百信广场','B返回','Q退出'
39 ],
40 '海珠区':[
41 '中山大学','城市职业学院','南方医科大学','B返回','Q退出'
42 ],
43 'B返回': '返回',
44 'Q退出': '退出'
45 }
46 }
47
48 # print(City)
49
50 Choice_of_city = list(City.keys())#字典转换为列表
51 # print(City.keys())
52 # print(City.values())
53 #打印字典使用format函数格式化
54 # print('{0[0]} {0[1]} {0[2]}'.format(Choice_of_city))
55
56 def menu():#使用函数def
57 while True:#只要为真就无限循环
58 print('{0[0]} {0[1]} {0[2]}'.format(Choice_of_city))#将列表Choice_of_city以函数format格式化打印
59 User_input_City = input('请选择城市:').strip()#用户输入,次数strip为移除空白
60 if User_input_City in Choice_of_city:#判断用户输入的信息是否在列表User_input_City中
61 District = list(City[User_input_City])#获取用户输入信息并根据用户输入信息取出字典City的values,
62 # 此处用户输入信息User_input_City相当于字典City的keys,并且把获取的values转换为列表District
63 while True:#只要为真就无限循环
64 # if User_input_City in Choice_of_city:
65 print('{0[0]} {0[1]} {0[2]} {0[3]} {0[4]}'.format(District))#将列表District以函数format格式化打印
66 User_input_District = input('请选择区县:').strip()#用户输入
67 if User_input_District not in District:#判断用户输入不在于列表District中
68 print('输入错误,请重新输入!!')
69 continue#退出当前循环继续下一次循环
70 if User_input_District in District:#判断用户输入是否在列表District中
71 if User_input_District == District[3]:#判断用户输入是否等于District中第4个元素
72 break#跳出当前循环
73 elif User_input_District == District[4]:#判断用户输入是否等于District中第4个元素
74 return#退出整个函数,这里用来退出所有循环
75 else:
76 while True:
77 Township = (City[User_input_City][User_input_District])
78 print('{0[0]} {0[1]} {0[2]} {0[3]} {0[4]}'.format(Township))
79 User_input_township = input('选择乡镇:').strip()
80 if User_input_township not in Township:
81 print('输入错误,请重新输入!!')
82 continue
83 if User_input_township in Township:
84 if User_input_township == Township[3]:
85 break
86 if User_input_township == Township[4]:
87 return
88 else:
89 print('Bingo!!!')
90 return
91 else:
92 continue
93 else:
94 break
95 else:
96 continue
97 else:
98 print('输入错误,请重新输入!!')
99 continue
100 # else:
101 # continue
102 # else:
103 # print('输入不正确,请重新输入!!')
104 menu()
另外在写了一个版本:
1 #!/usr/bin/env python3
2 City = {
3 '北京市':{
4 '大兴区':[
5 '亦庄','黄村','中信新城','返回','退出'
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 dic_city = {}
44 dic_district = {}
45 dic_address = {}
46 def menu():
47 while True:
48 for i in enumerate(City, 1): #循环字典City,并在keys前加序号
49 print(i[0], i[1]) #循环打印序号+City的keys
50 dic_city[str(i[0])] = i[1] #将打印的序号和字典City的keys循环加入新的字典dic_city中,此处str将序号转换为字符串,方便后面判断
51 user_input = input('选择前往城市编号:').strip() #用户输入,strip去掉两侧空格
52 # print(dic_city)
53 if len(user_input) == 0: #计算用户输入长度是否为0,判断输入是不是空值
54 print('输入不能为空,请重新输入!')
55 continue #退出本次循环
56 elif user_input in dic_city: #判断用户输入是否在字典dic_city中
57 while True:
58 for i in enumerate((City[dic_city[user_input]]),1):#循环中添加序号
59 print(i[0],i[1])
60 dic_district[str(i[0])] = i[1]
61 district = input('区县选择或退出返回(请填写序号即可):').strip()
62 if len(district) == 0: #计算用户输入长度是否为0,判断输入是不是空值
63 print('输入不能为空,请重新输入!')
64 continue
65 elif district == list(dic_district)[-2]: #判断用户输入是否等于倒数第二个元素,即:返回
66 break
67 elif district == list(dic_district)[-1]: #判断用户输入是否等于最后一个元素,即:退出
68 return #退出整个函数,这里用来退出多层循环
69 elif district not in dic_district: #判断用户输入不在字典dic_district中
70 print('输入不正确,请重新输入!')
71 continue
72 else:
73 while True:
74 for i in enumerate((City[dic_city[user_input]][dic_district[district]]),1):#多层字典,最外层字典City,
75 # [dic_city[user_input]新字典中取到City的keys,这样取到第二层字典;dic_district[district]新字典中取到
76 # 第二层字典的keys,City[dic_city[user_input]][dic_district[district]]整个是第二层字典加keys,最后取
77 # 出第三层
78 print(i[0],i[1])
79 dic_address[str(i[0])] = i[1]
80 address = input('选择地址或者返回退出(请填写序号即可):').strip()
81 if len(address) == 0:
82 print('输入不能为空,请重新输入!')
83 continue
84 elif address == list(dic_address)[-2]:
85 break
86 elif address == list(dic_address)[-1]:
87 return
88 elif address not in dic_address:
89 print('输入不正确,请重新输入!')
90 continue
91 else:
92 addr = '''
93 您选择的地址为:%s%s%s
94 '''%(dic_city[user_input],dic_district[district],dic_address[address])#段落输出格式,%s代替字符串
95 print(addr.strip())
96 return
97 continue
98 break
99 continue
100 else:
101 print('输入不正确,请重新输入!')
102 continue
103 menu()