用字典表现出树状图的形式,可以将部分省市下的部分县城、部分县城下的部分市区,一层一层的展示出来
直接写出来:
'''
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
本文供和我一样的初学者参考