需求:
可依次选择进入各子菜单
可从任意一层往回退到上一层
可从任意一层退出程序
所需新知识点: 列表, 字典
''''''
思路:
1, 菜单是分层的, 进入每一层的方法一样:
用一个新的字典动态的表示当前层, 遍历显示当前层, 输入选择, 判断进入下一层
2, 用一个列表记录父层, 当判断为返回时取出再次进入
3, 进入下一层前需要把当当前成存档父层列表中, 再把当前成换成选择的子层
4, 遍历具有层级的字典都需要注意边界问题, 有没有下一层, 上一层
5, 知识点: 判断语句中空就是假, 字典 value 空, 列表空等,
'''menu = {'北京':{'海淀':{'五道口':{'soho':{},'网易':{},'google':{}
- },
- '中关村':{
- '爱奇艺':{},
- '汽车之家':{},
- 'youku':{},
- },
- '上地':{
- '百度':{},
- },
- },
- '昌平':{
- '沙河':{
- '老男孩':{},
- '北航':{},
- },
- '天通苑':{},
- '回龙观':{},
- },
- '朝阳':{},
- '东城':{},
- },
- '上海':{
- '闵行':{
- "人民广场":{
- '炸鸡店':{}
- }
- },
- '闸北':{
- '火车战':{
- '携程':{}
- }
- },
- '浦东':{},
- },
- '山东':{},
- }
- if __name__ == '__main__':
- #实现动态循环
- current_layer = menu
- #记录父层, 最后一个总是当前层的父层
- parrent_layer = []
- while True:
- #遍历打印当前层, 打印当前字典的 keys
- for i in current_layer:
- print(i)
- #获取输入
- choice = input("请输入您的选择 (返回输入 b, 退出输入 q):").strip()
- #判断输入的选择是否在当前层
- if choice in current_layer:
- #判断下一层是否为空, 为空则表示已经最后一层了
- if current_layer[choice]:
- #进入子层前, 把当前层作为父层, 便于后面使用
- parrent_layer.append(current_layer)
- #把当前层换成进入后的子层
- current_layer = current_layer[choice]
- else:
- print("已经是最后一层了!")
- break
- elif choice== 'b':
- #如果 paarent_layer 为空, 则表示是第一层, 无父层
- if parrent_layer:
- current_layer = parrent_layer.pop()
- elif choice== 'q':
- break
- else:
- print("输入错误!")
来源: http://www.bubuko.com/infodetail-2607615.html