作业 - 三级菜单
递归实现
# 作业一: 三级菜单
# 要求:
# 打印省、市、县三级菜单
# 可返回上一级
# 可随时退出程序
menu = {
'北京':{
'海淀':{
'五道口':{
'soho':{},
'网易':{},
'google':{}
},
'中关村':{
'爱奇艺':{},
'汽车之家':{},
'youku':{},
},
'上地':{
'百度':{},
},
},
'昌平':{
'沙河':{
'老男孩':{},
'北航':{},
},
'天通苑':{},
'回龙观':{},
},
'朝阳':{},
'东城':{},
},
'上海':{
'闵行':{
"人民广场":{
'炸鸡店':{}
}
},
'闸北':{
'火车战':{
'携程':{}
}
},
'浦东':{},
},
'山东':{},
}
def three_menu(menu):
global tag
while tag:
for i in menu:
print(i)
key = input('>>>请输入: ').strip()
# 递归出口一: 不单要跳出本层,通过break实现,同时退出所有层,借助tag实现所有层的跳出
if key.lower() == 'q':
# exit('bye~')
tag = False
break
# 递归出口二: 通过break只退出本层
if key.lower() == 'b':
break
else:
three_menu(menu[key])
tag = 1
print('b: 返回, q: 退出 :')
three_menu(menu)
堆栈实现
menu = {
'北京':{
'海淀':{
'五道口':{
'soho':{},
'网易':{},
'google':{}
},
'中关村':{
'爱奇艺':{},
'汽车之家':{},
'youku':{},
},
'上地':{
'百度':{},
},
},
'昌平':{
'沙河':{
'老男孩':{},
'北航':{},
},
'天通苑':{},
'回龙观':{},
},
'朝阳':{},
'东城':{},
},
'上海':{
'闵行':{
"人民广场":{
'炸鸡店':{}
}
},
'闸北':{
'火车战':{
'携程':{}
}
},
'浦东':{},
},
'山东':{},
}
# 借助一个辅助的lst模拟堆栈,实现三级菜单
lst = [menu,]
while 1:
for i in lst[-1]:
print(i)
key = input('请输入>>> ')
if key == 'q':
break
if key == 'b':
try:
lst.pop()
except:pass
continue
else:
lst.append(menu[key])
menu = menu[key]