标签:黑龙江省 layer span input break choice strip 用户 代码
#__author: Tiger li
#date: 2016/8/24
province={
"河北省":{
"石家庄市":[‘长安区‘,‘桥西区‘,‘新华区‘],
"唐山市":[‘路北区‘,‘路南区‘,‘古冶区‘],
"保定市":[‘竞秀区‘,‘莲池区‘,‘满城区‘]
},
"吉林省":{
"长春市":[‘南关区‘,‘朝阳区‘,‘绿园区‘],
"吉林市":[‘船营区‘,‘龙潭区‘,‘昌邑区‘],
"松原市":[‘宁江区‘,‘乾安县‘,‘长岭县‘]
},
"黑龙江省":{
"哈尔滨市":[‘道里区‘,‘南岗区‘,‘道外区‘],
"佳木斯市":[‘向阳区‘,‘前进区‘,‘东风区‘],
"牡丹江市":[‘东安区‘,‘阳明区‘,‘爱民区‘]
}
}
while True:
for pro in province:
print(pro)
pro_input = input("请输入省份(例:吉林省) 退出(e): ")
if pro_input in province.keys():
citylist = province[pro_input]
while True:
for city in citylist:
print (city)
city_input = input("请输入城市(例:吉林市) 返回上一层(q) 退出(e): ")
if city_input in citylist.keys():
while True:
for area in citylist[city_input]:
print(area)
area_input = input("返回上一层(q) 退出(e): ")
if area_input == ‘q‘:
break
elif area_input == ‘e‘:
exit()
else:
print(‘输入错误,请重新输入: ‘)
elif city_input == ‘q‘:
print(‘返回上一层菜单‘)
break
elif city_input == ‘e‘:
exit()
else:
print(‘输入错误,请重新输入: ‘)
elif pro_input == ‘e‘:
exit()
else:
print(‘输入错误,请重新输入: ‘)
好的程序员都会写出非常优质的代码,什么是优质的代码呢?你用30行代码实现的东西,人家只需要10行,这就是差别。同样,三级菜单还有一套更精简的代码,就叫高大上版吧
#__author: Tiger li
#date: 2016/8/25
menu={
"河北省":{
"石家庄市":[‘长安区‘,‘桥西区‘,‘新华区‘],
"唐山市":[‘路北区‘,‘路南区‘,‘古冶区‘],
"保定市":[‘竞秀区‘,‘莲池区‘,‘满城区‘]
},
"吉林省":{
"长春市":[‘南关区‘,‘朝阳区‘,‘绿园区‘],
"吉林市":[‘船营区‘,‘龙潭区‘,‘昌邑区‘],
"松原市":[‘宁江区‘,‘乾安县‘,‘长岭县‘]
},
"黑龙江省":{
"哈尔滨市":[‘道里区‘,‘南岗区‘,‘道外区‘],
"佳木斯市":[‘向阳区‘,‘前进区‘,‘东风区‘],
"牡丹江市":[‘东安区‘,‘阳明区‘,‘爱民区‘]
}
}
current_layer = menu #实现动态循环
parent_layers = [] #保存所有父级,最后一个元素永远都是父级
while True:
for key in current_layer:
print(key)
choice = input(">>>:").strip()
if len(choice) == 0:continue
if choice in current_layer:
parent_layers.append(current_layer) #在进入下一层之前,把当前层(即下一层的父级)
#下一次循环,当用户选择b的时候,就可以直接取列表的最后一个值出来就ok了
current_layer = current_layer[choice] #改成了子层
elif choice == "b":
if parent_layers: # []
current_layer = parent_layers.pop() #取出列表的最后一个值,因为它就是当前层的父级
else:
print("输入错误,请重新输入:")
标签:黑龙江省 layer span input break choice strip 用户 代码
原文地址:http://www.cnblogs.com/paul03/p/6784706.html