menu = {
'北京': {
'海淀': {
'五道口': {
'soho': {},
'网易': {},
'google': {}
},
'中关村': {
'爱奇艺': {},
'汽车之家': {},
'youku': {},
},
'上地': {
'百度': {},
},
},
'昌平': {
'沙河': {
'老男孩': {},
'北航': {},
},
'天通苑': {},
'回龙观': {},
},
'朝阳': {},
'东城': {},
},
'上海': {
'闵行': {
"人民广场": {
'炸鸡店': {}
}
},
'闸北': {
'火车战': {
'携程': {}
}
},
'浦东': {},
},
'山东': {},
}
def threeLM(dic):
while True:
for k in dic:print(k)
key = input('input>>').strip()
if key == 'b' or key == 'q':return key # 输入b会return b本身,直接结束当前循环,返回上一级,不断输入b,直至结束
elif key in dic.keys() and dic[key]: # 判断key在列表中,并且有内容不为空,则进行递归执行下一步
ret = threeLM(dic[key])
if ret == 'q': return 'q' #如果输入q,则直接退出
threeLM(menu)
-------------------------------------------------------------------------------------------------------------
#堆栈实现
l = [menu]
while l: # while l 目的在于防止b返回上一级到顶部时异常
for key in l[-1]:
print(key)
k = input('input>>').strip() # 北京
if k in l[-1].keys() and l[-1][k]: #判断是否有值与下一级非空
l.append(l[-1][k])
elif k == 'b':l.pop() #删除当前菜单,返回上一级
elif k == 'q':break