python省市区三级联动

目前个人主要从事java开发,也想学习一下python,个人学习python初级阶段,上网找些练习题自己学习一下,在网上看了一道题目有关省市区多级菜单的题目,也附加的有代码,注释也很详细,不过个人觉得把所有的代码放在一块感觉不太好,自己别重写了一下,题目可参考http://www.cnblogs.com/gengcx/p/6940190.html

一下贴出个人代码供大家参考

#!/usr/bin/env python3
# encoding:utf-8
'''
@author: lierl
@file: province_city.py
@time: 2018/3/30 9:43
'''
__author__ = 'lierl'


dict_db = {
    "河南": [
        {
            "郑州": [
                "中原区",
                "金水区",
                "二七区",
                "上街区",
                "巩义市",
                "新郑市",
                "新密市",
                "登封市",
                "荥阳市",
                "中牟县"
            ]
        },
        {
            "开封": [
                "鼓楼区",
                "龙亭区",
                "禹王台区",
                "金明区",
                "开封县",
                "尉氏县",
                "兰考县",
                "杞县",
                "通许县"
            ]
        },
        {
            "南阳": [
                "卧龙区",
                "宛城区",
                "邓州市",
                "桐柏县",
                "方城县",
                "淅川县",
                "镇平县",
                "唐河县",
                "南召县",
                "内乡县"
            ]
        },
        {
            "洛阳": [
                "西工区",
                "老城区",
                "涧西区",
                "瀍河回族区",
                "洛龙区",
                "吉利区",
                "偃师市",
                "孟津县",
                "汝阳县"
            ]
        }
    ],
    "湖南": [
        {
            "长沙": [
                "岳麓区",
                "芙蓉区",
                "天心区",
                "开福区",
                "雨花区",
                "浏阳市",
                "长沙县"
            ]
        },
        {
            "岳阳": [
                "岳阳楼区",
                "云溪区",
                "君山区",
                "临湘市",
                "汨罗市",
                "岳阳县"
            ]
        },
        {
            "株洲": [
                "天元区",
                "荷塘区",
                "芦淞区",
                "石峰区",
                "醴陵市",
                "株洲县",
                "炎陵县"
            ]
        },
        {
            "湘潭": [
                "岳塘区",
                "雨湖区",
                "湘乡市",
                "韶山市",
                "湘潭县"
            ]
        }
    ],
    "广东": [
        {
            "广州": [
                "越秀区",
                "荔湾区",
                "海珠区",
                "天河区",
                "白云区",
                "黄埔区",
                "番禺区",
                "花都区"
            ]
        },
        {
            "深圳": [
                "福田区",
                "罗湖区",
                "南山区",
                "宝安区",
                "龙岗区",
                "盐田区"
            ]
        },
        {
            "珠海": [
                "香洲区",
                "斗门区",
                "金湾区"
            ]
        }
    ]
}
#!/usr/bin/env python3
# encoding:utf-8
'''
@author: lierl
@file: do_three_level.py
@time: 2018/3/30 9:33
'''
import os

__author__ = 'lierl'

'''
(1)三级菜单
(2)可以次选择进入各子菜单
(3)所需新知识点:列表、字典
要求:输入back返回上一层,输入quit退出整个程序
思路:
    (1)首先定义好三级菜单字典;
  (2)提取第一级省的编号,打印包含哪些省份,让用户输入省份的编号,能够显示对应的省,这个过程需要创建一个字典,用于存放省原有的名称和编号,以便用户输入之后进去匹配;
    (3)进入第二级菜单,市的提取,市也存放在一个字典中,以便用户输入对应的编号的时候能够到字典中查找,并返回对应的市;
  (4)根据上面输入,得到县/区的列表,遍历列表,并使用enumerate()给县/区添加编号,对应的索引只需减一即可,因为不可能让用户看到从0开始,而列表默认是从0开始的;
'''
from demo.exercise.province_city import dict_db

# 显示省
def show_province():
    while True:
        print("欢迎来到全国省市区查询系统...")
        print("+---------------------------------------------------------------+")
        #获取到所有的省
        province_dict = {}
        province_nos = []
        for index, province in enumerate(dict_db.keys(), start=1):
            print('省的编号:%s          省的名称:%s' % (index, province))
            province_dict[index] = province
            province_nos.append(index)
        print("+---------------------------------------------------------------+")
        province_no = input('请输入你要查询的省的编号(输入quit退出):')
        province_no = province_no.strip()
        if province_no == 'quit':
            exit()
        elif province_no.isdigit():
            province_num = int(province_no)
            if province_num not in province_nos:
                print("您输入的数字不存在,请重新输入")
                show_province()

            province_name = province_dict[province_num]
            print(province_name)
            show_city(province_name)
        else:
            print("您输入的不是数字,请输入的对应的数字")
            show_province()

# 显示市
def show_city(province_name):
    while True:
        print('+---------------------------------------------------------------+')
        city_dict = {}
        cities = {}
        cities_nos = []
        for index, city_all in enumerate(dict_db[province_name], start=1):
            cities_nos.append(index)
            cities[index] = city_all
            for city in city_all.keys():
                print('市的编号:%s        市的名称:%s' % (index, city))
                city_dict[index] = city
        print('+---------------------------------------------------------------+')
        city_no = input("请输入你要查询的市的编号(输入quit退出,输入back返回上一层):")
        city_no = city_no.strip()
        if city_no == 'quit':
            exit()
        elif city_no == 'back':
            break
        elif city_no.isdigit():
            city_num = int(city_no)
            if city_num not in cities_nos:
                print("您输入的数字不存在,请重新输入")
                show_city(province_name)

            city_name = city_dict[city_num]
            print('%s    %s' % (province_name, city_name))
            show_county(province_name, city_name, cities, city_num)
        else:
            print("您输入的不是数字,请输入的对应的数字")
            show_city(province_name)

# 显示县
def show_county(province_name, city_name, cities, city_num):
    while True:
        print('+---------------------------------------------------------------+')
        country_dict = {}
        country_nos = []
        for country_all in cities[city_num].values():
            for index, country in enumerate(country_all, start=1):
                country_dict[index] = country
                country_nos.append(index)
                print('县/区编号:%s        县/区名称:%s' % (index, country))
        print('+---------------------------------------------------------------+')
        country_no = input('请输入你要查询的县/区的编号(输入quit退出,输入back返回上一层):')
        country_no = country_no.strip()
        if country_no == 'quit':
            exit()
            show_county(province_name, city_name, cities, city_num)
        elif country_no == 'back':
            break
        elif country_no.isdigit():
            country_num = int(country_no)
            if country_num not in country_nos:
                print("您输入的数字不存在,请重新输入")
                show_county(province_name, city_name, cities, city_num)

            print('%s    %s    %s' % (province_name, city_name, country_dict[country_num]))
            exit()
        else:
            print("您输入的不是数字,请输入的对应的数字")
            show_county(province_name, city_name, cities, city_num)

if __name__ == '__main__':
    show_province()





把省市区封装成了三个方法,个人觉得比较清晰。。不足之处,请指正


你可能感兴趣的:(python)