xiechen@[TOC]
一、省市县三菜单简述
三级菜单:可让用户选择查看全国各省,各市,各县分级名单。
可实现:
可返回上一级菜单
可随时退出菜单
二、代码实现
1.逻辑性化简版!!!!(算法化简,但需要一些思考来理解)
注意:当前各省份已录完,市县只录入大连市,及其直辖县,如需实现完整菜单,请自行补全
region = {
'河北省':{},
'山西省':{},
'辽宁省':{
'沈阳市':{},
'大连市':{'中山区',
'西岗区',
'沙河口区',
'甘井子区',
'旅顺口区',
'金州区',
'普兰店区',
'长海县',
'瓦房店市',
'庄河市'},
'鞍山市':{},
'抚顺市':{},
'本溪市':{},
'丹东市':{},
'锦州市':{},
'营口市':{},
'阜新市':{},
'辽阳市':{},
'盘锦市':{},
'铁岭市':{},
'朝阳市':{},
'葫芦岛市':{}},
'吉林省':{},
'黑龙江省':{},
'江苏省':{},
'浙江省':{},
'安徽省':{},
'福建省':{},
'江西省':{},
'山东省':{},
'河南省':{},
'湖北省':{},
'湖南省':{},
'广东省':{},
'海南省':{},
'四川省':{},
'贵州省':{},
'云南省':{},
'陕西省':{},
'甘肃省':{},
'青海省':{},
'台湾省':{},
'内蒙古自治区':{},
'广西壮族自治区':{},
'西藏自治区':{},
'宁夏回族自治区':{},
'新疆维吾尔自治区':{},
'北京市':{},
'天津市':{},
'上海市':{},
'重庆市':{},
'香港特别行政区':{},
'澳门特别行政区':{}
}
regional_record = region
region_list = [] #使用列表来存入每次输出的区域名,每次输出的区域名将会在列表中,另外形成一个嵌套的小列表,即保存父级分区
while True:
for i,v in enumerate(regional_record,1): #打印分区键值
print(i,'----',v)
show_region = input("请输入您需要查看的区域(如果退出请输入:quit,返回上一层:last)信息:")
if show_region == 'quit': #退出程序
exit("\n----欢迎下次使用----")
elif show_region == 'last':
if region_list: #判断列表是否被删空
regional_record = region_list.pop() #pop()默认从列表最后删除元素,并返回删除的值,所以每次都会将上一分区的键值删除并返回给打印分区键名变量,完成返回上一级操作
else:
region_list.append(regional_record) #在每次进入下一层分区时,将当前分区的键值添加到列表中
regional_record = regional_record[show_region] #进入下一分区
输出样例(省——辽宁省——大连市——及其直辖县):
1 ---- 河北省
2 ---- 山西省
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 ---- 澳门特别行政区
请输入您需要查看的区域(如果退出请输入:quit,返回上一层:last)信息:辽宁省
1 ---- 沈阳市
2 ---- 大连市
3 ---- 鞍山市
4 ---- 抚顺市
5 ---- 本溪市
6 ---- 丹东市
7 ---- 锦州市
8 ---- 营口市
9 ---- 阜新市
10 ---- 辽阳市
11 ---- 盘锦市
12 ---- 铁岭市
13 ---- 朝阳市
14 ---- 葫芦岛市
请输入您需要查看的区域(如果退出请输入:quit,返回上一层:last)信息:大连市
1 ---- 庄河市
2 ---- 长海县
3 ---- 瓦房店市
4 ---- 金州区
5 ---- 中山区
6 ---- 沙河口区
7 ---- 旅顺口区
8 ---- 西岗区
9 ---- 普兰店区
10 ---- 甘井子区
请输入您需要查看的区域(如果退出请输入:quit,返回上一层:last)信息:quit
----欢迎下次使用----
2.简易繁杂版!!(代码逻辑简单,按顺序理解即可)
注意:当前各省份已录完,市县只录入大连市,及其直辖县,如需实现完整菜单,请自行补全
region = {
'河北省':{},
'山西省':{},
'辽宁省':{
'沈阳市':{},
'大连市':{'中山区',
'西岗区',
'沙河口区',
'甘井子区',
'旅顺口区',
'金州区',
'普兰店区',
'长海县',
'瓦房店市',
'庄河市'},
'鞍山市':{},
'抚顺市':{},
'本溪市':{},
'丹东市':{},
'锦州市':{},
'营口市':{},
'阜新市':{},
'辽阳市':{},
'盘锦市':{},
'铁岭市':{},
'朝阳市':{},
'葫芦岛市':{}},
'吉林省':{},
'黑龙江省':{},
'江苏省':{},
'浙江省':{},
'安徽省':{},
'福建省':{},
'江西省':{},
'山东省':{},
'河南省':{},
'湖北省':{},
'湖南省':{},
'广东省':{},
'海南省':{},
'四川省':{},
'贵州省':{},
'云南省':{},
'陕西省':{},
'甘肃省':{},
'青海省':{},
'台湾省':{},
'内蒙古自治区':{},
'广西壮族自治区':{},
'西藏自治区':{},
'宁夏回族自治区':{},
'新疆维吾尔自治区':{},
'北京市':{},
'天津市':{},
'上海市':{},
'重庆市':{},
'香港特别行政区':{},
'澳门特别行政区':{}
}
while True:
for i,v in enumerate(region.keys(),1): #打印分区键名
print(i,'----',v)
show_region = input("请选择您需要查看的省(直辖市,自治区,特别行政区)(退出:quit,返回上一层:last):")
if show_region == 'quit': #退出程序
exit("\n----欢迎下次使用----")
if show_region not in region.keys(): #判断是否存在输入的键名
print("\n未找到该区域,请重新输入\n")
else:
while True:
for j,p in enumerate(region[show_region].keys(),1): #打印省份键名
print(j,'----',p)
show_province = input("请选择您需要查看的城市信息(退出:quit,返回上一层:last)::")
if show_province == 'quit':
exit(("\n----欢迎下次使用----"))
if show_province == 'last':
break
if show_province not in region[show_region].keys():
print(print("\n未找到该区域名称,请重新输入\n"))
else:
for x,u in enumerate(region[show_region][show_province],1): #没有下一级键值对,所以直接输出该键对应的所有值
print(x,'----',u)
end_show = input("退出:quit,返回上一层:last\n请选择:")
if end_show == 'quit':
exit(("\n----欢迎下次使用----"))
if end_show == 'last':
continue
输出样例(省——辽宁省——大连市——及其直辖县):
1 ---- 河北省
2 ---- 山西省
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 ---- 澳门特别行政区
请选择您需要查看的省(直辖市,自治区,特别行政区)(退出:quit,返回上一层:last):辽宁省
0 ---- 沈阳市
1 ---- 大连市
2 ---- 鞍山市
3 ---- 抚顺市
4 ---- 本溪市
5 ---- 丹东市
6 ---- 锦州市
7 ---- 营口市
8 ---- 阜新市
9 ---- 辽阳市
10 ---- 盘锦市
11 ---- 铁岭市
12 ---- 朝阳市
13 ---- 葫芦岛市
请选择您需要查看的城市信息(退出:quit,返回上一层:last)::大连市
0 ---- 西岗区
1 ---- 普兰店区
2 ---- 沙河口区
3 ---- 瓦房店市
4 ---- 庄河市
5 ---- 金州区
6 ---- 中山区
7 ---- 长海县
8 ---- 旅顺口区
9 ---- 甘井子区
退出:quit,返回上一层:last
请选择:quit
----欢迎下次使用----
感慨:
人与人之间的逻辑思维有时候真是相差离谱啊,自己苦思冥想想不出更好优化算法,化简代码的方法,但是别人就能别出心裁,简简单单就思考出解决办法。
真是学海无涯,淦!!!!!
看来只能,学多点东西来弥补那点逻辑上的空缺了…
(应该没人看到吧,毕竟看到这文章的人本来就没几个,还有,谁没事有简化版代码不看,看繁杂版代码看到最后)