Python 字典应用:实现三级联动 ;和其用递推的表示

3 篇文章 0 订阅
3 篇文章 0 订阅

用字典表现出树状图的形式,可以将部分省市下的部分县城、部分县城下的部分市区,一层一层的展示出来

直接写出来:

'''
csdn作者:peipei12138
完成时间:19/3/26
任务:关于省市县的三级联动(python字典表示)
'''

zone = {
     '山东' : {
         '青岛' : ['四方','黄岛','崂山','李沧','城阳'],
         '济南' : ['历城','槐荫','高新','长青','章丘'],
         '烟台' : ['龙口','莱山','牟平','蓬莱','招远']
     },
     '江苏' : {
         '苏州' : ['沧浪','相城','平江','吴中','昆山'],
         '南京' : ['白下','秦淮','浦口','栖霞','江宁'],
         '无锡' : ['崇安','南长','北塘','锡山','江阴']
     },
     '浙江' : {
         '杭州' : ['西湖','江干','下城','上城','滨江'],
         '宁波' : ['海曙','江东','江北','镇海','余姚'],
         '温州' : ['鹿城','龙湾','乐清','瑞安','永嘉']
     },
     '安徽' : {
         '合肥' : ['蜀山','庐阳','包河','经开','新站'],
         '芜湖' : ['镜湖','鸠江','无为','三山','南陵'],
         '蚌埠' : ['蚌山','龙子湖','淮上','怀远','固镇']
     },
     '广东' : {
         '深圳' : ['罗湖','福田','南山','宝安','布吉'],
         '广州' : ['天河','珠海','越秀','白云','黄埔'],
         '东莞' : ['莞城','长安','虎门','万江','大朗']
     }
}

kaiguan = 1
while kaiguan: # 可以重复查询
    for key in zone: # 输出所有省份
        print (key)
    
    shengfen = input('请输入省份:(或者输入q结束查询)')
    if shengfen in zone: # 选择省份,进入二级选项

        while kaiguan:
            for key1 in zone[shengfen]:
                print(key1)
                
            shiqu = input('请输入市区:(或者输入q结束查询 或者输入r返回上一级)')
            if shiqu in zone[shengfen]: # 选择市区,进入三级选项

                while kaiguan:
                    for key3 in zone[shengfen][shiqu]:
                        print(key3)
                        
                    xian = input('请输入县城:(或者输入q结束查询 或者输入r返回上一级)')
                    if xian in zone[shengfen][shiqu]: # 选择县城
                        print('你现在的所在地为:', xian)
                    
                    elif xian == 'r' or xian == 'R': break    
                    elif xian == 'q' or xian == 'Q': kaiguan = 0
                    else : print('输入不合法')
            
            elif shiqu == 'r' or shiqu == 'R': break    
            elif shiqu == 'q' or shiqu == 'Q': kaiguan = 0
            else : print('输入不合法')
    
    elif shengfen == 'r' or shengfen == 'R': print('不存在上一级')  
    elif shengfen == 'q' or shengfen == 'Q': kaiguan = 0
    else : print('输入不合法')  

代码将字典内的每一个键又指向一个低级的字典,形成一级一级的联动。可以实现的功能,输入一个省份或一个高级的key会将它的第一级的元素打印出来,可以用'r'或‘q'来随时返回上一级或结束查询。

用递推的方法来简写代码:

kaiguan = 1 # 开关
place_now = zone # 递推中每一步的所在位置
path = [zone] # 用来记录路径的栈

while kaiguan:
    for key in place_now:
        print(key)
    
    try:
        place = input('请输入下一级地址:(\
或者输入 r 返回上一级;或者输入 q 结束查询)')
        if place == 'q' or place == 'Q': kaiguan = 0
        elif place == 'r' or place == 'R': 
            if len(path) == 1: print('已经处于最高级,无法返回')
            else: 
                del path[-1]
                place_now = path[-1]
        elif place in place_now: 
            place_now = place_now[place]
            path.append(place_now)
        else: print('输入不合法')
    except:
        print('你现在所在地为:', place,'(到达最后一级)')

为了实现和之前一样的’r'返回上一级的功能,这里添加了一个记录路径的栈path

本文供和我一样的初学者参考

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值