zoukankan      html  css  js  c++  java
  • python学习之路-练习小程序03(三级菜单)

    需求:
    可依次选择进入各子菜单
    可从任意一层往回退到上一层
    可从任意一层退出程序
    所需新知识点:列表、字典

    1.基础版:
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #Author:zengwenhai
    
    # 三级菜单
    menu = {
        '湖南省':{
            '郴州市':{
                '嘉禾县':{
                    '珠泉镇':{},
                    '袁家镇':{},
                    '泮头乡':{}
                },
                '汝城县':{
                    '土桥镇':{},
                    '永丰乡':{},
                    '田庄':{}
                },
                '安仁县':{
                    '灵官镇':{},
                    '关山镇':{}
                }
            },
            '常德市':{
                '汉寿县':{
                    '蒋家嘴镇':{},
                    '坡头镇':{}
                },
                '安乡县':{
                    '安丰乡':{},
                    '安生乡':{}
                },
                '桃源县':{}
            }
        },
        '广东省':{
            '深圳市':{
                '宝安区':{
                    '西乡':{},
                    '固戍':{}
                },
                '南山':{
                    '中兴':{},
                    '深圳大学':{}
                }
            },
            '广州市':{
                '越秀区':{
                    '火车站':{},
                    '越秀公园':{}
                }
            },
        },
    }
    
    stop_flag = False  # 定义一个循环各级菜单的标志位,这个标志的作用:当用户输入某个字符时停留在本级菜单上
    break_flag = False  # 定义一个循环各级菜单的标志位,这个标志的作用:当用户输入某个字符时返回上一级菜单上
    flag_list = ['s','b']  # 用来判断输入的菜单名是s或b时,不会提示:第xx级菜单名输入错误,请重新输入
    while not break_flag:
        print("第一级菜单>>>>>")
        print("==========")
        for k in menu:
            print(k)
        print("==========================================================")
        choicename = input("请输入第一级菜单名[s|S跳出程序---b|B返回上一级菜单]:").strip().lower()  # 去除输入项左右空格,如果是输入字母,统一转换为小写
        print("==========")
    
        if choicename in menu:
            while not stop_flag and not break_flag:
                for k1 in menu[choicename]:
                    print(k1)
                print("==========================================================")
                choicename1 = input("请输入第二级菜单名[s|S跳出程序---b|B返回上一级菜单]:").strip().lower()
                print("==========")
                if choicename1 == 's':  # 当输入的是s时,跳出程序
                    exit()
                elif choicename1 == 'b':  # 当输入b时,将break_flag标志置为True,本循环层不开始,返回上一层
                    break_flag = True
    
                if choicename1 in menu[choicename]:
                    print("第三级菜单名")
                    print("==========")
                    while not stop_flag and not break_flag:
                        for k2 in menu[choicename][choicename1]:
                            print(k2)
                        print("==========================================================")
                        choicename2 = input("请输入第三级菜单名[s|S跳出程序---b|B返回上一级菜单]:").strip().lower()
                        if choicename2 == 's':
                            exit()
                        elif choicename2 == 'b':
                            break_flag = True
    
                        if choicename2 in menu[choicename][choicename1]:
                            while not stop_flag and not break_flag:
                                print("第四级菜单名")
                                print("==========")
                                for k3 in menu[choicename][choicename1][choicename2]:
                                    print(k3)
                                print("==========================================================")
                                choicename3 = input("请输入s或b[s|S停留在本级菜单---b|B返回上一级菜单]:").strip().lower()
                                print("==========")
                                if choicename3 == 's':
                                    exit()
                                elif choicename3 == 'b':
                                    break_flag = True
                                else:
                                    print("这是最后一级菜单")
                            else:  # while块下对应的else,如果while循环中未中断,执行此语句,给break_flag标志位重新赋值为False,确保第三级菜单可以正常循环
                                break_flag = False
                        elif choicename2 in flag_list:  # 此处是避免输入s或b,程序停在当前菜单层或返回上级菜单层时提示:第xx级菜单名输入错误,请重新输入ps.不加这个判断的话,程序会返回上级菜单,但是也会报菜单名错误
                            pass
                        else:
                            print("第三级菜单名输入错误,请重新输入")
    
                    else:  # while块下对应的else,如果while循环中未中断,执行此语句,给break_flag标志位重新赋值为False,确保第二级菜单可以正常循环
                        break_flag = False
                elif choicename1 in flag_list:
                    pass
                else:
                    print("第二级菜单名输入错误,请重新输入")
    
            else:  # while块下对应的else,如果while循环中未中断,执行此语句,给break_flag标志位重新赋值为False,确保第一级菜单可以正常循环
                break_flag = False
        elif choicename in flag_list:
            pass
        else:
            print("第一级菜单名输入错误,请重新输入!")

    2.升级版:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #Author:zengwenhai
    
    # 三级菜单
    menu = {
        '湖南省':{
            '郴州市':{
                '嘉禾县':{
                    '珠泉镇':{},
                    '袁家镇':{},
                    '泮头乡':{}
                },
                '汝城县':{
                    '土桥镇':{},
                    '永丰乡':{},
                    '田庄':{}
                },
                '安仁县':{
                    '灵官镇':{},
                    '关山镇':{}
                }
            },
            '常德市':{
                '汉寿县':{
                    '蒋家嘴镇':{},
                    '坡头镇':{}
                },
                '安乡县':{
                    '安丰乡':{},
                    '安生乡':{}
                },
                '桃源县':{}
            }
        },
        '广东省':{
            '深圳市':{
                '宝安区':{
                    '西乡':{},
                    '固戍':{}
                },
                '南山':{
                    '中兴':{},
                    '深圳大学':{}
                }
            },
            '广州市':{
                '越秀区':{
                    '火车站':{},
                    '越秀公园':{}
                }
            },
        },
    }
    
    tmp = menu  # 用来存储菜单名的临时中间变量
    flag = False
    count = 1
    parent_menu = []  # 定义一个空列表,用来存储每次循环后的上级菜单名
    while not flag:
        print("<<<<<<<<打印菜单名>>>>>>>>")
        for k in tmp:
            print(k)
        choice = input("请输入菜单名[s|S跳出程序---b|B返回上一级菜单]:").strip().lower()
        if choice in tmp:
            parent_menu.append(tmp)  # 把上级菜单名添加到列表里
            tmp = tmp[choice]
        elif choice == 'b':
            if parent_menu:  # 判断列表非空,不加判断的话,从最末级菜单层层返回上级菜单,最后列表会变为空,再执行pop方法时报错
                tmp = parent_menu.pop()  # 通过pop方法取出上级菜单名,并重新赋值给中间变量
        elif choice == 's':
            exit()
        else:
            print("菜单名输入错误,请重新输入")
  • 相关阅读:
    漫谈施工企业信息化规划(修订)
    SOAOffice 中间件,北京科翰软件
    组建“建筑施工企业信息化技术交流”QQ群(102226121),欢迎参与!
    国产、免费业务流程梳理工具SAM,炎黄盈动公司产品
    (参考)OpenExpressApp架构-信息系统开发平台
    逍遥笔输入法,哈!
    昨天开了一天的会!!
    昨天回到北京了!
    幸福是什么?
    周末辽宁兴城
  • 原文地址:https://www.cnblogs.com/zengwenhai/p/8836215.html
Copyright © 2011-2022 走看看