三级菜单优化

#_author:Mr. lai
#date:2019/10/28
#three menu
#1.可以一层一层进入到所有层
#2.可以在每一层返回上一层
#3.可以在任意层退出主菜单
menu={
'北京':{
'朝阳':{
'国贸':{
'CICC':{},
'HP':{},
'渣打银行':{},
'CCTV':{},
},
'望京':{
'MoMo':{},
'奔驰':{},
'360':{}
},
'三里屯':{
'优衣库':{},
'苹果':{}

},
},
'昌平':{
'沙河':{
'老男孩':{},
'阿泰包子':{}
},
'天通苑':{
'链家':{},
'我爱我家':{}
},
'回龙观':{}
},
'海淀':{
'五道口':{
'谷歌':{},
'网易':{},
'搜狐':{},
'搜狗':{},
'快手':{},
'清华':{},
'北大':{},
'民大':{},
'地址科技大学':{},
},
'中关村':{
'优酷':{},
'爱奇艺':{},
'汽车之家':{},
'新东方':{},
'腾讯':{},

}
}

},
'上海':{
'浦东':{
'陆家嘴':{
'CICC':{},
'摩根':{},
'高盛':{},
},
'外滩':{},

},
'闵行':{},
'静安':{},
},
'广州':{},
'山东':{
'济南':{

},
'德州':{
'乐凌':{
'丁务镇':{}
},
'平原':{},

},
'青岛':{},
},
}
current_layer=menu#实现动态循环
parent_layer=[]#保存所有父级,最后一个元素永远是父级
while True:
for key in current_layer:
print(key)
choice=input(">>:").strip()
if len(choice)==0:continue
if choice in current_layer:
parent_layer.append(current_layer)#在进入下一层之前,把当前层(也就是下一层的父级)追加到列表中,
#下一次循环,当用户选择b的时候,就可以直接取列表的最后一个值出来
current_layer=current_layer[choice]#进入子层
elif choice=='b':
if parent_layer:
current_layer=parent_layer.pop()#取出列表的最后一个值,因为它就是当前层父级
else:
print('no item')
Output:

北京
上海
广州
山东
>>:北京
朝阳
昌平
海淀
>>:昌平
沙河
天通苑
回龙观
>>:b
朝阳
昌平
海淀
>>:朝阳
国贸
望京
三里屯
>>:望京
MoMo
奔驰
360
>>



01-03 02:03