python--递归与堆栈实现多级菜单

现在有如下城市选择菜单

  • 河北
    • 石家庄
      • 长安区
      • 新华区
    • 保定
      • 莲池区
      • 涿州
  • 北京
    • 朝阳
      • 三里屯
      • 双井
    • 海淀
      • 中关村
      • 西北旺
  • 浙江
    • 杭州
      • 滨江
      • 余杭
    • 宁波
      • 海瞩
      • 江北

需求为

  • 用户输入名字,进入下一级菜单
  • 用户输入back,返回上级菜单
  • 用户输入q,退出该功能

递归

递归实现的方法

menu = {
    "河北": {
        "石家庄": {
            "长安区": {},
            "新华区": {}
                 },
        "保定": {
            "莲池区": {},
            "涿州": {}
                }
            },
    "北京": {
        "朝阳": {
            "三里屯": {},
            "双井": {}
                },
        "海淀": {
            "中关村": {},
            "西北旺": {}
                }
            },
    "浙江": {
        "杭州": {
            "滨江": {},
            "余杭": {}
                },
        "宁波": {
            "海瞩": {},
            "江北": {}
                }
            }
    }


def select_menu(dic_menu):

    while 1:
        for one in dic_menu:
            print(one)
        msg = input(">>>").strip()
        if msg.lower() == "back": return False
        elif msg.lower() == "q": return True
        elif dic_menu.get(msg):
            flag = select_menu(dic_menu[msg])
            if flag: return True



用栈来实现,这种实现方式很重要,掌握后可以用在很多场景中

def select_menu(dic_menu):

    dic_list = [dic_menu]
    while dic_list:
        tmp = dic_list[-1]
        for key in tmp:
            print(key)
        msg = input(">>>").strip()
        if msg.lower() == "back": dic_list.pop()
        elif msg.lower() == "q": break
        elif tmp.get(msg):
            dic_list.append(tmp[msg])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值