python实现三级菜单

需求:
可依次选择进入各子菜单
可从任意一层往回退到上一层
可从任意一层退出程序

源数据结构:

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

新手丑陋第一版:

print(list(menu),"1:退出")
l=[menu]#将元数据分层切割保存到列表中,方便从任何一层返回上一级
while True:
    choose=input("输入城市名或者数字:").strip()
    if choose=='1':
        break
    if choose=='2' and len(l)!=1:
        l.pop()    #删除列表尾部对象   
        a=tuple(l[len(l)-1])
    if choose in l[len(l)-1]:#下一级
        a=tuple(l[len(l)-1][choose])
        l.append(l[len(l)-1][choose])
    else:
        print("请输入正确的命令:")
    if len(l)==1:
        print(a,"1:退出")
    else:
        print(a,"1:退出","2:返回")

紧凑丑陋第二版:

l=[menu]
while True:
    print(list(l[len(l)-1]))
    choose=input("输入城市名或者数字1退出2返回:").strip()
    if choose=='1':break
    if choose=='2' and len(l)!=1:l.pop()
    elif choose in l[len(l)-1]:l.append(l[len(l)-1][choose])
    else:print("请输入正确的命令:")

三元表达式第三版:

l=[menu]
while True:
    print(list(l[len(l)-1]))
    choose=input("输入城市名或者数字1退出2返回:").strip()
    exit() if choose=='1' else(l.pop() if choose=='2' and len(l)!=1 else (l.append(l[len(l)-1][choose]) if choose in l[len(l)-1] else print("请输入正确的命令")))

我在学习的过程中不止写了这些版本,核心思路基本没有变,变的只是形式,而且建议,并不是行数越少越好,原因略。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值