- #!/usr/bin/env python
- # -*- coding:utf-8 -*-
- # Author:XXX
- map = {
- '浦西':{
- '黄浦区':{
- '城隍庙':['小吃','九曲桥','绿波廊'],
- '南京路步行街':['第一百货','沈大成','永安百货'],
- },
- '徐汇区':{
- '徐家汇':['百脑汇','汇金百货','港汇广场'],
- '龙华寺':['古寺之一','风水宝地','烧香灵'],
- },
- '静安区':{
- '马戏城':['时空之旅','马戏','特技表现'],
- '大灵灵石公园':['郁金香展','人工湖划船','婚纱拍摄地'],
- },
- },
- '浦东':{
- '浦东新区':{
- '东方明珠':['上海标志性地标','太空舱','旋转餐厅'],
- '海洋水族馆':['亚洲第一','海底隧道','28个主题馆'],
- },
- '原川沙':{
- '迪士尼乐园':['大陆第一','七大主题乐园','两座主题酒店'],
- },
- '原南汇':{
- '野生动物园':['首座国家级野生动物园','两大参观区','AAAAA'],
- '南汇鲜花港':['多肉展','百合花展','菊花展'],
- },
- },
- '崇明':{
- '中北部':{
- '东平森林公园':['AAAAA','华东区最大的人造平原森林','上海著名旅游胜地'],
- },
- '南部':{
- '西沙湿地':['候鸟','日落','观潮'],
- },
- '西部':{
- '明珠湖':['天然湖泊','鸬鹚保护地','扶摇直上'],
- },
- },
- }
- level = []
- while True:
- forkeyin map:
- print(key)
- choice = input("请选择,按b退到上一级菜单:").strip()
- # if choice == 'b':break # 由于不用while套while的用法,这样写就不合理
- ifchoice =='b':# 这里输入b需要退到上一级,却列表中最后一个值
- iflen(level) == 0:break # 如果level长度为0,就退出整个while语句map = level[-1]
- level.pop() # 这里需要将level列表最后一个值删除
- iflen(choice) == 0orchoicenot inmap:continue # 这里continue就是继续下一个语句
- level.append(map)
- map = map[choice]# 这里是核心代码,每次把用户输入的内容,作为子字典
- '''
- 此段代码的核心是map = map[choice]
- 作用是将重复代码(while套while)减少
- 第一,关键点时查找字典的时候,定位到下一级字典,并且将下一级字典赋值给while语句中的字典
- 第二,由于用了第一点的语句,那么就需要给退出上一级菜单做标记。
- 解决办法就是,用一个空列表,将父字典的key值赋值给空列表的最后一位
- 如果退出的时候,就将列表中最后一位删除即可。
- '''
来源: http://www.bubuko.com/infodetail-2087311.html