利用字典模拟省市区(县)的查询

#python3.7
p=  {                                     #建立字典p
    '陕西省':
            {''
             '西安市':
                 {'新城区','莲湖区','灞桥区'},
             '咸阳市':
                 {'秦都区','杨凌区','渭城区'},
             '汉中市':
                 {'汉台区','洋县','勉县'}
            },
    '河北省':
            {
                '开封市':
                 {'通许县','龙亭区','鼓楼区'},
             '安阳市':
                 {'林州市','汤阴县','内黄县'},
             '焦作市':
                 {'解放区','温县','中站区'}
            },
        '山东省':
            {'青岛市':
                 {'市南区','市北区','四方区'},
             '烟台市':
                 {'福山区','牟平去','莱山区'},
             '济南市':
                 {'天桥区','市中区','历城区'}
            },

    }
p_list=list(p.keys())                #将字典p的keys转换为列表赋给p_list
Flag=True
while Flag:
    for i in p_list:                 #列表p_list元素下标+1为序号,并打印省份i
        print(p_list.index(i)+1,i)
    p_id=input("请输入所查找省份的编号(输入E退出):\n")
    if p_id.isdigit():               #判断输入的p_id是否由数字构成
        p_id=int(p_id)               #若p_id只由数字构成,则输出列表p_list中p下标为(p_id-1)的元素(所求省份)
        if p_id >0 and p_id<= len(p_list):
            p_name=p_list[p_id-1]    #将所查省份赋给p_name
            city_list=list(p[p_name])#将字典中key为p_name的嵌套字典的keys 转换为列表 并赋给city_list
            while Flag:
                for i in city_list:  #同理求出所查找城市的行政区域
                    print(city_list.index(i)+1,i)
                c_id=input("请输入所查找城市的编号(输入B返回上一层\n输入E退出):\n")
                if c_id.isdigit():
                    c_id=int(c_id)
                    if c_id >0 and c_id<= len(city_list):
                        c_name=city_list[c_id-1]
                        town_list=list(p[p_name][c_name])
                        while Flag:
                            for i in town_list:
                                print(town_list.index(i)+1,i)
                            print('请选择你的操作:')
                            m =input("输入B返回上一层\n输入E退出\n")
                            if m=='B':#输入m  若为B打断当前循环  返回上层循环
                                    break
                            elif m=='E':
                                Flag=False
                                break
                            else:
                                print('输入无效,请重新输入\n')

                elif c_id=='B':
                    break
                elif c_id=='E':
                    Flag=False
                else:
                    print('输入无效,请重新输入\n')
    elif p_id=='E':                   #若p_id不仅仅有数字构成,判断是否只为E,若为E打断当前循环(结束进程)
        break
    else:
        print('输入无效,请重新输入\n')

  运行结果

1 陕西省
2 河北省
3 山东省
请输入所查找省份的编号(输入E退出):
2
1 开封市
2 安阳市
3 焦作市
请输入所查找城市的编号(输入B返回上一层
输入E退出):
3
1 中站区
2 温县
3 解放区
请选择你的操作:
输入B返回上一层
输入E退出
B
1 开封市
2 安阳市
3 焦作市
请输入所查找城市的编号(输入B返回上一层
输入E退出):
E

Process finished with exit code 0

  

猜你喜欢

转载自www.cnblogs.com/huanyue123/p/10011580.html