欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python 三级菜单

程序员文章站 2022-07-14 22:58:25
...

三级列表:

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

 基础版本:

#首先要有个死循环,能够一直的输入
while True:
    #打印第一层的数据
    for key in menu:
        print(key)
    #然后叫用户选择
    choice = input(">>:").strip()#去掉空格
    #判断是否是回车
    if choice == 'b':break
    if choice == 'q':exit("欢迎下次再来")
    if len(choice) ==0:continue#避免输入空格

    print("------进入下一级------".center(50))
    #第一,确保北京在字典里,有一个key,有,直接调这个key,进入下一级

    #判断字典有没有这个值,有get和in两种方法
    if choice not in menu:continue#如果不在里面继续往里输,跳过这次选择

    #为下一层循环单独加一个循环
    while True:
        #先把下一层取到
        for key2 in menu[choice]:
            print(key2)

        choice2 = input(">>:").strip()
        if choice2 == 'b': break
        if choice2 == 'q': exit("欢迎下次再来{name}".format(name=choice2))
        if len(choice2) ==0:continue
        if choice2 not in menu[choice]:continue#判断用户输入的选项如果没在第这层菜单中,跳出

        # 为下一层循环单独加一个循环
        while True:
            # 先把下一层取到
            for key3 in menu[choice][choice2]:
                print(key3)

            choice3 = input(">>:").strip()
            if choice3 == 'b': break
            if choice3 == 'q': exit("欢迎下次再来")
            if len(choice3) == 0: continue
            if choice3 not in menu[choice][choice2]: continue  # 判断用户输入的选项如果没在第这层菜单中,跳出

            while True:
                # 先把下一层取到
                for key4 in menu[choice][choice2][choice3]:
                    print(key4)

                choice4 = input(">>:").strip()
                if choice4 == 'b': break
                if choice4 == 'q': exit("欢迎下次再来")
                if len(choice4) == 0: continue
                if choice4 not in menu[choice][choice2][choice3]: continue  # 判断用户输入的选项如果没在第这层菜单中,跳出

 

优化之后,高级版本:

current_level = menu #当前层 #初始变量
last_level = [] #定义空列表,返回上一级用的,每进入一层就存一层
while True:
    for key in current_level:#循环每一层
        print(key)
    choice = input(">>:").strip()
    if len(choice) == 0:continue

    # 返回上一层
    # 自己记住每层的上一层,每次在进入下一层之前,我当前层就相当于下一层的父集
    if choice == 'b':
    #    current_level = last_level#把当前层的变量改成上一层[把当前层改成父亲层,这样下一次循环就回到上一层]
        if not last_level :break #if len(last_level) == 0:break
        current_level = last_level[-1]#每退出一层取列表最后一个值
        last_level.pop()#删一层
    if choice not in current_level:continue
    #choice在里面进入下一层
    last_level.append(current_level)#每进一层存一层
    current_level = current_level[choice]#给current_level重新赋值,进入下一层,每换一个变量,下一次就到了for key in current_level层

 完毕。