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])

你可能感兴趣的:(python,python,递归法,堆栈)