python (个人学习笔记1.0系列番外)--利用字典与其调用函数建立,省市县三级菜单(更改原版本代码,并添加一个化简版代码)

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

----欢迎下次使用----

感慨:
人与人之间的逻辑思维有时候真是相差离谱啊,自己苦思冥想想不出更好优化算法,化简代码的方法,但是别人就能别出心裁,简简单单就思考出解决办法。

真是学海无涯,淦!!!!!
看来只能,学多点东西来弥补那点逻辑上的空缺了…
(应该没人看到吧,毕竟看到这文章的人本来就没几个,还有,谁没事有简化版代码不看,看繁杂版代码看到最后)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值