三级菜单问题

版权声明:请注明原创地址 https://blog.csdn.net/xy_best_/article/details/83340727

1、可依次选择进入各子菜单
2、可从任意一层往回退到上一层
3、可从任意一层退出程序

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

# 三种方法,其中第三种最为简单,第二种用了递归函数
# ----------------------------第一种方法--------------------
initial = []
while True:
    for i in menu:
        print(i)
    name = input("B/b为返回上层,Q/q为退出程序,请输入查看的内容>>>: ").strip()
    if name in menu:
        initial.append(menu)  # 每次执行将父级的内容添加到列表中,
        menu = menu[name]   # 重新赋值,以便下次 if 来判断
    elif name == "b" or name == "B":
        if len(initial) == 0:
            print("已经在最顶层,无法继续返回")
            continue
        menu = initial.pop()  # 删除最后列表中最后一个,并返回,来模拟返回后显示上层的数据内容
    elif name == "q" or name == "Q":
        break
    else:
        print("输入内容错误,请重新输入")

# ----------------------------第二种方法--------------------

def threeLM(dic):
     while True:
        for k in dic:
            print(k)   # 打印当前的一级城市
        key = input('input>>').strip()
        if key == 'b' or key == 'q':
            print(key)
            return key
        elif key in dic.keys() and dic[key]:
            ret = threeLM(dic[key])  """ 递归函数,每次输入城市时,其实就相当于又执行了一遍函数,只不过执行函数的参数有变化,
            当输入b时,执行return,就跳出了当前层函数,回到了上级函数中的循环,参数也是上级的参数,就会有返回上级城市的输出,当然如果当前
            是最外面的函数,程序就退出,无论在哪一级城市,当输入q时,跳出当前函数,把值赋值给ret,然后跳出循环
            """
            if ret == 'q':
                return 'q'

threeLM(menu)

# ----------------------------第三种方法--------------------

dic = [menu]
num = {}
while dic:
    for index, key in enumerate(dic[-1], 1):
        print(index, ":", key)
        num[index] = key
    k = input('输入b(回上级)或q(退出)>>:').strip()
    print(num)
    if k.isdigit():
        k = num[int(k)]
        print(k)
        if k in dic[-1].keys() and dic[-1][k]:
            dic.append(dic[-1][k])
    elif k == 'b':
        dic.pop()
    elif k == 'q':
        break

猜你喜欢

转载自blog.csdn.net/xy_best_/article/details/83340727