首页 > 代码库 > 三级菜单实例

三级菜单实例

技术分享

技术分享
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:XXX


map = {
    浦西:{
        黄浦区:{
            城隍庙:[小吃,九曲桥,绿波廊],
            南京路步行街:[第一百货,沈大成,永安百货],
        },
        徐汇区:{
            徐家汇:[百脑汇,汇金百货,港汇广场],
            龙华寺:[古寺之一,风水宝地,烧香灵],
        },
        静安区:{
            马戏城:[时空之旅,马戏,特技表现],
            大灵灵石公园:[郁金香展,人工湖划船,婚纱拍摄地],
        },
    },
    浦东:{
        浦东新区:{
            东方明珠:[上海标志性地标,太空舱,旋转餐厅],
            海洋水族馆:[亚洲第一,海底隧道,28个主题馆],
        },
        原川沙:{
            迪士尼乐园:[大陆第一,七大主题乐园,两座主题酒店],
        },
        原南汇:{
            野生动物园:[首座国家级野生动物园,两大参观区,AAAAA],
            南汇鲜花港:[多肉展,百合花展,菊花展],
        },
    },
    崇明:{
        中北部:{
            东平森林公园:[AAAAA,华东区最大的人造平原森林,上海著名旅游胜地],
        },
        南部:{
            西沙湿地:[候鸟,日落,观潮],
        },
        西部:{
            明珠湖:[天然湖泊,鸬鹚保护地,扶摇直上],
        },
    },
}

level = []

while True:
    for key in map:
        print(key)
    choice = input("请选择,按b退到上一级菜单:").strip()
     # if choice == ‘b‘:break  # 由于不用while套while的用法,这样写就不合理
    if choice == b:  # 这里输入b需要退到上一级,却列表中最后一个值
        if len(level) == 0:break  # 如果level长度为0,就退出整个while语句
        map = level[-1]
        level.pop()  # 这里需要将level列表最后一个值删除
    if len(choice) == 0 or choice not in map:continue  # 这里continue就是继续下一个语句

    level.append(map)
    map = map[choice]  # 这里是核心代码,每次把用户输入的内容,作为子字典


‘‘‘
此段代码的核心是map = map[choice]
作用是将重复代码(while套while)减少
第一,关键点时查找字典的时候,定位到下一级字典,并且将下一级字典赋值给while语句中的字典
第二,由于用了第一点的语句,那么就需要给退出上一级菜单做标记。
    解决办法就是,用一个空列表,将父字典的key值赋值给空列表的最后一位
    如果退出的时候,就将列表中最后一位删除即可。
‘‘‘
View Code

 

三级菜单实例