python学习之路-练习小程序03(三级菜单)

Posted zengwenhai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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("菜单名输入错误,请重新输入")

 

以上是关于python学习之路-练习小程序03(三级菜单)的主要内容,如果未能解决你的问题,请参考以下文章

python学习之路 三级菜单的实现

python基础之作业3----三级菜单小练习

Python程序练习2--模拟三级菜单

Python练习_三级菜单

python练习——moudule01——三级菜单

PYTHON自学之路_三级菜单_实战