三级菜单—递归、堆栈

数据

menu = {
    '北京': {
        '海淀': {
            '五道口': {
                'soho': {},
                '网易': {},
                'google': {}
            },
            '中关村': {
                '爱奇艺': {},
                '汽车之家': {},
                'youku': {},
            },
            '上地': {
                '百度': {},
            },
        },
        '昌平': {
            '沙河': {
                '网易': {},
                '北航': {},
            },
            '天通苑': {},
            '回龙观': {},
        },
        '朝阳': {},
        '东城': {},
    },
    '上海': {
        '闵行': {
            "人民广场": {
                '炸鸡店': {}
            }
        },
        '闸北': {
            '火车战': {
                '携程': {}
            }
        },
        '浦东': {},
    },
    '山东': {},
}

1.递归实现

def tree_m(menu):
    while True:
        for key in menu:
            print(key)
        inp = input("请输入<B返回上一层,Q退出>:")
        if inp.upper() == "Q":
            return "Q"
        if inp.upper() == "B":
            return "B"
        elif menu.get(inp):
            ret = tree_m(menu[inp])
            if ret == "Q":
                return "Q"
tree_m(menu)

2.堆栈

lst = [menu]
while lst:
    for key in lst[-1]:
        print(key)
    inp = input("请输入<B返回上一层,Q退出>:")
    if inp.upper() == "Q":
        break
    elif inp.upper() == "B":
        lst.pop()
    elif lst[-1].get(inp):
        lst.append(lst[-1][inp])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值