关于三级菜单

程序: 三级菜单

要求: 

  1. 打印省、市、县三级菜单
  2. 可返回上一级
  3. 可随时退出程序
menu = {
    '北京':{
        '海淀':{
            '五道口':{
                'soho':{},
                '网易':{},
                'google':{}
            },
            '中关村':{
                '爱奇艺':{},
                '汽车之家':{},
                'youku':{},
            },
            '上地':{
                '百度':{},
            },
        },
        '昌平':{
            '沙河':{
                '老男孩':{},
                '北航':{},
            },
            '天通苑':{},
            '回龙观':{},
        },
        '朝阳':{},
        '东城':{},
    },
    '上海':{
        '闵行':{
            "人民广场":{
                '炸鸡店':{}
            }
        },
        '闸北':{
            '火车战':{
                '携程':{}
            }
        },
        '浦东':{},
    },
    '山东':{
        '青岛':{
            '城阳区':{
                '训练场':{}
            }
        }
    },
}
menu

 

flag=1
while flag==1:
    for key in menu:#遍历第一层菜单
        print(key)#给用户打印显示
    choise=input("请选择(返回:b,退出:q):")#用户交互
    if choise.lower()=="b":#将输入的b或者B转成小写的b
        continue    #返回上级菜单
    elif choise.lower()=="q":#将输入的q或者Q转成小写的q
        flag=0  #当输入q时标志位变成0,直接退出程序
    while flag==1:
        for key in menu[choise]:#遍历新的菜单(下同)
            print(key)
        choise_a=input("请选择(返回:b,退出:q):")
        if choise_a.lower() == "b":
            break
        elif choise_a.lower() == "q":
            flag=0
        while flag==1:
            for key in menu[choise][choise_a]:
                print(key)
            choise_b = input("请选择(返回:b,退出:q):")
            if choise_b.lower() == "b":
                break
            elif choise_b.lower() == "q":
                flag=0
            while flag==1:
                for key in menu[choise][choise_a][choise_b]:
                    print(key)
                choise_c = input("请选择(返回:b,退出:q):")
                if choise_c.lower() == "b":
                    break
                elif choise_c.lower() == "q":
                    flag=0
正常版(有没有发现代码大量复用?)

 

new_menu=menu#将menu设置成变量new_menu,新的菜单
old_menu=[menu]#将menu加入到old_menu菜单中,此列表是为了记录上层菜单的列表
while 1:
    for key in new_menu:#遍历第一层菜单
        print(key)#打印给用户看
    choise=input(">>>:")#用户交互
    if choise in new_menu:#用户输入的在新的菜单里时,在退出本次while循环,进入for循环
        # 此时改变我们定义的变量new_menu和old_menu
        old_menu.append(new_menu)#当我们进入下层菜单时本层菜单就变成了下层的上层菜单,所以将本层菜单加入这个列表中
        new_menu=new_menu[choise]#将本层选择的下层菜单重新赋值给new_menu。
        continue#完成上面准备后退出本次for循环再进入while循环
    if choise=="b":#如果选择b,返回上层菜单--->通过取列表的最后值得到上层菜单
        if len(old_menu)==0:#如果列表变成0,将原始菜单赋值给新菜单,防止报错
            new_menu=menu
        else:
            new_menu=old_menu[-1]#取列表最后的值就是我们存的上层菜单
            old_menu.pop()#当我们取到上层菜单后就将其从列表删除,为了下次能取到新的上层菜单
            continue
    if choise=="q":#退出while循环
        break
精简加强版(有点绕)

 

posted @ 2017-05-11 20:11  im777  阅读(171)  评论(0编辑  收藏  举报