zoukankan      html  css  js  c++  java
  • 关于三级菜单

    程序: 三级菜单

    要求: 

    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
    精简加强版(有点绕)
  • 相关阅读:
    怎么为学生布置作业
    新学期的第一节Android课
    RUCSE小组博客列表
    test
    个人最终总结
    黄金点小游戏的设计与实现
    WordCount 程序的实现
    阅读下面程序,请回答如下问题:
    Visual Studio 2015的安装和简单的单元测试
    构建之法--软件工程学习随笔之二
  • 原文地址:https://www.cnblogs.com/mrpengfei/p/6842529.html
Copyright © 2011-2022 走看看