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("菜单名输入错误,请重新输入")

原文地址:https://www.cnblogs.com/zengwenhai/p/8836215.html

时间: 2024-10-08 06:56:51

python学习之路-练习小程序03(三级菜单)的相关文章

python学习day4--python基础--购物小程序

'''购物小程序:用户启动时先输入工资用户启动程序后打印商品列表允许用户选择购买商品允许用户不断购买各种商品购买时检测余额是否够,如果够直接扣款,否则打印余额不足允许用户主动退出程序,退出时打印已购商品列表'''salary=input("input you salary:")if salary.isdigit(): salary=int(salary)else: exit("invalid data type.....")welcome_msg='welcome

Python学习-计算BMI的小程序

示例: 小明身高1.75,体重80.5kg.请根据BMI公式(体重除以身高的平方)帮小明计算他的BMI指数,并根据BMI指数: 低于18.5:过轻 18.5-25:正常 25-28:过重 28-32:肥胖 高于32:严重肥胖 用if-elif判断并打印结果: # -*- coding: utf-8 -*- height = 1.75 weight = 80.5 bmi = 80.5/1.75*1.75 if bmi < 18.5:     print('过轻') elif bmi >= 18.

python 学习之路2-第一个程序

在搞清楚 对象编程后,为什么要编程后(回顾:因为需求,不想苦逼) 我们开始认真开始,我不是一个软件专业的人,但是看书总是,让你看到:hello,world! 虽然本人比较反感,但是print 函数还是非常有用.本课 我们要把 输入,输出,python的元素说说.....是不是很简单...... python 6大基本元素... 1. 字符串 string,使用频率超高 'abc' 就是字符串类型: 2. 列表list,使用频率也可以,切片最长用. [1,2,3,4] 3. 元组,跟列表一样,区别

python爬虫学习之用Python抢火车票的简单小程序

利用Python制作自动抢火车票小程序,过年再也不要担心没票了! 前言 每次过年很多人都会因为抢不到火车票而回不了家,所以小编利用Python写了一个自动抢火车票的工具,希望大家能抢到火车票,回家过个好年! 我本来想自己写一个练练手的,但是转眼一想,Python 本身最大的优势是什么,不就是有很多牛逼的人已经造好轮子了吗?你只需要知道这些轮子并会使用就行了,这样会节省你大量的精力和时间,而且站在巨人的肩膀上,会看得更远.于是我在 github 上一搜索,果然有不少抢票程序,有的是 Python2

Python学习之路-Day1-Python基础

Python学习之路第一天 学习内容: 1.Python简介 2.安装 3.第一个Python程序 4.变量 5.字符编码 6.用户输入 7.表达式if..else语句 8.表达式for语句 9.break和continue 10.while循环 11.字符串格式化 1.python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承. 最新的TIOB

Python 学习之路(二)

Python 学习之路(二) 以下所用的是Python 3.6 一.条件语句 简单判断 1 if 判断条件: 2 执行语句-- 3 else: 4 执行语句-- 复杂判断 1 if 判断条件1: 2 执行语句1-- 3 elif 判断条件2: 4 执行语句2-- 5 elif 判断条件3: 6 执行语句3-- 7 else: 8 执行语句4-- 二.循环语句 2.1 while语句 和其他语言一样,不同的是多了else语句.在 python 中,while - else 在循环条件为 false

Python学习之路(第一周)

走上软件开发之路已经三个年头.我本人是android原生开发出生.期间由于工作的需要以及开发的趋势发展,也走上混合开发的道路,现在主要运用ionic框架进行移动端app的开发.但是未来的互联网发展趋势还是大数据+人工智能.所以现在学习Python就很有必要.这里就不介绍Python语言的优劣了,想具体了解的小伙伴可以自行度娘吧. 好了,直接步入正题. 本博客主要记录自己接下来几个月的Python学习之路,能力有限,期间有什么表达不对的欢迎大家留言区批评指正! Python版本:Python3.5

Python学习之路【第一篇】-Python简介和基础入门

1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是一种开发语言,而且已经进阶到主流的二十多种开发语言的top 5(数据源自最新的TIOBE排行榜). 来头不小啊!二十多种主流的开发语言,我该从哪一个开始呢?人生苦短,let‘s python! 1.2 Python的由来和发展趋势 Python的前世源自鼻祖“龟叔”.1989年,吉多·范罗苏姆(Gu

Python学习之路——强力推荐的Python学习资料

资料一:程序媛想事儿(Alexia)总结 Python是一种面向对象.直译式计算机程序设计语言.它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用縮进来定义语句块.与Scheme.Ruby.Perl.Tcl等动态语言一样,Python具备垃圾回收功能,能够自动管理内存使用.它经常被当作脚本语言用于处理系统管理任务和网络程序编写,然而它也非常适合完成各种高级任务. Python上手虽然容易,但与其它任何语言一样要学好Python并非一日之功.我的Pyth