zoukankan      html  css  js  c++  java
  • 用Python写三级菜单的三个版本

    要求:

         1.可以进入子菜单

         2.可以返回上一级

         3.可以从任意一级直接退出

    基础版:(主要运用到了字典的读取)

    #以字典的格式存放,方便调用
    data={
        '河北':{
            '保定':{
                '曲阳':['燕赵','党城'],
                '阜平':['平阳','山子头']
            },
            '邢台':{
                '桥东区':['邢台学院','天一广场'],
                '桥西区':['北国商城','科技大厦']
            },
            '石家庄':{
                '裕华区':['河北科技大学','河北师范大学'],
                '长安区':['河北医科大学','河北地址大学']
            }
        },
        '北京':{
            '海淀':{
                '清华':['荷塘月色','牡丹园'],
                '北京大学':['博雅塔','未名湖']
            },
            '朝阳':{
                '中国传媒大学':['新闻','播音'],
                '北京工业大学':['计算机','软件工程']
            },
            '延庆':{
                '八达岭长城':['北长城','南长城'],
                '野生动物园':['老虎','狮子']
            }
        }
    }
    exit_flag=False #设置全局变量,用来退出循环,实现任意一级菜单都可以退出
    while not exit_flag:
        for i1 in data:#读取第一级菜单
            print(i1)
        choice=input('选择进入1,第一级,按q退出')
        if choice in data:
            while not exit_flag:
                for i2 in data[choice]:#读取第二级菜单
                    print(i2)
                choice2 = input('选择进入2,按b返回上一级,按q退出')
                if choice2 in data[choice]:
                    while not exit_flag:
                        for i3 in data[choice][choice2]:#读取第三级菜单
                            print(i3)
                        choice3 = input('选择进入3,按b返回上一级,按q退出')
                        if choice3 in data[choice][choice2]:
                            for i4 in data[choice][choice2][choice3]:
                                print(i4)
                            choice4 = input('最后一层,按b返回上一级,按q退出')
                            if choice4=='b':
                                pass #占位符
                            if choice4 == 'q':
                                exit_flag = True
                        if choice3=='b':
                            break
                        if choice3 == 'q':
                            exit_flag = True
                if choice2=='b':
                    break
                if choice2 == 'q':
                    exit_flag = True
        if choice=='q':
            exit_flag=True

    瑕疵版(主要运用了函数的递归调用,使用了global定义局部变量,这样定义的局部变量可以修改全局变量。不到万不得已,不可使用global)

    exit_flag=False
    #以字典的格式存放,方便调用
    data={
        '河北':{
            '保定':{
                '曲阳':['燕赵','党城'],
                '阜平':['平阳','山子头']
            },
            '邢台':{
                '桥东区':['邢台学院','天一广场'],
                '桥西区':['北国商城','科技大厦']
            },
            '石家庄':{
                '裕华区':['河北科技大学','河北师范大学'],
                '长安区':['河北医科大学','河北地址大学']
            }
        },
        '北京':{
            '海淀':{
                '清华':['荷塘月色','牡丹园'],
                '北京大学':['博雅塔','未名湖']
            },
            '朝阳':{
                '中国传媒大学':['新闻','播音'],
                '北京工业大学':['计算机','软件工程']
            },
            '延庆':{
                '八达岭长城':['北长城','南长城'],
                '野生动物园':['老虎','狮子']
            }
        }
    }
    def func_choice(kwargs):
        '''函数说明'''
        global exit_flag #定义一个可以修改全局变量的局部变量,以便程序可以随时退出
        while not exit_flag:
            for i in kwargs:
                print(i)
            choice=input("选择进入,按b返回上一级,按q退出")
            if choice in kwargs:
                func_choice(kwargs[choice])#递归调用
            if choice=='q':
                exit_flag=True
            if choice=='b':
                break
    
    func_choice(data)

         此版本中还要说明一点,虽然data的存储类型为字典,但是此字典中还嵌套了列表,所以在定义参数时,不能定义为(**kwargs),否则会出现以下错误:

    成熟版(主要运用了列表。个人认为这个版本最好,代码简洁,利于理解)

    exit_flag=False
    #以字典的格式存放,方便调用
    data={
        '河北':{
            '保定':{
                '曲阳':['燕赵','党城'],
                '阜平':['平阳','山子头']
            },
            '邢台':{
                '桥东区':['邢台学院','天一广场'],
                '桥西区':['北国商城','科技大厦']
            },
            '石家庄':{
                '裕华区':['河北科技大学','河北师范大学'],
                '长安区':['河北医科大学','河北地址大学']
            }
        },
        '北京':{
            '海淀':{
                '清华':['荷塘月色','牡丹园'],
                '北京大学':['博雅塔','未名湖']
            },
            '朝阳':{
                '中国传媒大学':['新闻','播音'],
                '北京工业大学':['计算机','软件工程']
            },
            '延庆':{
                '八达岭长城':['北长城','南长城'],
                '野生动物园':['老虎','狮子']
            }
        }
    }
    count=0
    last_rank = []
    while  not exit_flag:
        for i in data:
            print(i)
        if count==3:
            print("到达最后一层,按q退出,按b返回")
        elif count==0:
            print("当前是第一层,按q退出")
        else:
            print("当前为第%s层" % (count+1))
        choice = input('>:').strip()
        count+=1
        if choice in data:
            last_rank.append(data)  # 将当前菜单添加到列表(列表中的每一个元素为一个字典)
            data = data[choice]         # 进入下一层菜单
        elif choice == 'b':
            if len(last_rank) != 0:
                data = last_rank.pop()  # 删除列表最后一位元素,从而返回上一层
        elif choice == 'q':
            exit_flag = True

    执行结果如下图所示:

    欢迎各位大神测试并指正,谢谢!

      

  • 相关阅读:
    我正在使用的 Gnome 扩展列表(不定期更新)
    PHP中 <<< A ··· A 是什么意思
    Java 中 this 的作用
    Java 类成员变量中 public, private, protected, default 权限区别
    虫师github
    在线学习的网站
    软件测试博客
    乙醇公开课视频
    教你如何写框架------元素管理篇
    自动化测试与持续集成方案--接口测试
  • 原文地址:https://www.cnblogs.com/come-on-baby/p/9381753.html
Copyright © 2011-2022 走看看