三级菜单

1.用递归的方法实现

dic = {
    '北京': {
        '东城':
            {
                '沙河': {
                    '链家':{},
                    '安居客':{'三里屯'}
                },
                '天通苑': {'北方明珠', '天通尾货'}
            },
        '朝阳':
            {
                '花家地': {'朝阳公园', '望京soho'},
                '北小河': {'北小河公园', '北京中学'}
            }
    },
    '上海': {
        '虹桥':
            {
                '虹桥机场': ['超市', '特产店', '水吧'],
                '东方明珠': ['电影院', '游泳馆', '餐馆']
            },
        '浦东':
            {
                '景秀路': ['世纪公园', '立交桥'],
                '中环路': ['鲁迅公园', '同济大学']
            }
    },
    '河北': {
        '石家庄':
            {
                '行唐': ['东正', '阳关'],
                '赵县': ['赵州桥', '高村乡']
            },
        '唐山':
            {
                '滦南县': ['司各庄镇', '安各庄镇'],
                '玉田县': ['玉田镇', '亮甲店镇']
            }
    }
}
#递归的方法实现
def sanjicaidan(dic):
    while True:
        for k in dic:
            print(k)
        key = input('input>>>>')
        if key == 'b' or key == 'q':
            return key
        elif key in dic.keys() and dic[key]:
            ret = sanjicaidan(dic[key])       #递归调用
            if ret == 'q':
                return 'q'
sanjicaidan(dic)

2.用堆栈的方式实现

dic = {
    '北京': {
        '东城':
            {
                '沙河': {
                    '链家':{},
                    '安居客':{'三里屯'}
                },
                '天通苑': {'北方明珠', '天通尾货'}
            },
        '朝阳':
            {
                '花家地': {'朝阳公园', '望京soho'},
                '北小河': {'北小河公园', '北京中学'}
            }
    },
    '上海': {
        '虹桥':
            {
                '虹桥机场': ['超市', '特产店', '水吧'],
                '东方明珠': ['电影院', '游泳馆', '餐馆']
            },
        '浦东':
            {
                '景秀路': ['世纪公园', '立交桥'],
                '中环路': ['鲁迅公园', '同济大学']
            }
    },
    '河北': {
        '石家庄':
            {
                '行唐': ['东正', '阳关'],
                '赵县': ['赵州桥', '高村乡']
            },
        '唐山':
            {
                '滦南县': ['司各庄镇', '安各庄镇'],
                '玉田县': ['玉田镇', '亮甲店镇']
            }
    }
}
l=[dic]
while l:
    for key in l[-1]:            #l[-1]就是dic
        print(key)
    k = input('input>>>').strip()
    #如果输入的k在dic中且k还有值,那么就执行下面
    if k in l[-1].keys() and l[-1][k]:
        l.append(l[-1][k])
   #当输入北京时,l[-1][k]就相当于{'东城':{...},'朝阳':{...}}
    #l.append执行后l就是l=[dic,{'东城':{...},'朝阳':{...}}]
    elif k == 'b':
        l.pop()         #输入b时就把{'东城':{...},'朝阳':{...}}pop出去
    elif k == 'q':
        break
原文地址:https://www.cnblogs.com/wm0217/p/10880222.html