Python模拟三级菜单效果
发布时间 - 2026-01-11 03:11:24 点击率:次本文实例为大家分享了Python模拟三级菜单效果的具体代码,供大家参考,具体内容如下

1.功能简介
此程序模拟多级菜单操作,实现按菜单项对应数字索引进入下级菜单,按b键回退到上一级菜单,按q键退出菜单。并用一个简化的学科专业目录进行了三级菜单测试,实际上此程序可适用任意多级菜单操作。
2.实现方法
本程序采用python语言编写,为了高效实现菜单操作,减少循环次数,关键定义了如下三个变量:
current_menu_dict:非最低级菜单时为一个嵌套字典,在最低级菜单时为一个列表,存放当前级及后续各级菜单。
upper_menu_list:一个列表,存放比当前级更高级别的所有菜单嵌套字典的列表,最后一个元素比current_menu_dict多一层父菜单。
temp_menu:一个列表,只存放当前级的菜单,即为current_menu_dict的键值。
菜单操作过程:
(1)按数字键进入对应的下级菜单:数字键是temp_menu的索引,根据索引提取当前菜单项,即为current_menu_dict的一个键值,据此current_menu_dict可重新指向该键值对应的下一级菜单嵌套字典,不过在进入下级菜单之前,upper_menu_list.append(current_menu_dict)先把当前菜单嵌套字典添加为upper_menu_list的最后一个元素,为回退做准备。
(2)按b键回退到上一级菜单:回退时current_menu_dict=upper_menu_list.pop()获取上一级菜单嵌套字典,实现回退。
(3)按q键退出菜单:按q键时调用exit()退出程序。
简例示意:假设三级菜单字典为{一级菜单:{二级菜单:三级菜单}},如果当前菜单在第二级,此时
current_menu_dict={二级菜单:三级菜单}
upper_menu_list=[{一级菜单:{二级菜单:三级菜单}}]
temp_menu=[二级菜单]
3.流程图
4.代码
# Author:Byron Li
menu_data={
'文学':
{
'中国语言文学':['语言学及应用语言学','汉语言文字学','中国古代文学','中国现当代文学'],
'外国语言文学':['英语语言文学','亚非语言文学','阿拉伯语语言文学','外国语言学及应用语言学'],
'新闻传播学': ['新闻学', '传播学'],
'艺术学': ['音乐学', '美术学','戏剧戏曲学','电影学','舞蹈学']
},
'理学':
{
'数学':['基础数学','计算数学','概率论与数理统计','应用数学','运筹学与控制论'],
'物理学':['理论物理','粒子物理与原子核物理','原子与分子物理','等离子体物理','无线电物理'],
'化学': ['无机化学','分析化学','有机化学','物理化学','高分子化学与物理'],
'生物学': ['植物学', '动物学','生理学','微生物学','遗传学'],
'地球物理学': ['固体地球物理学', '空间物理学']
},
'工学':
{
'机械工程':['机械制造及其自动化','机械电子工程','机械设计及理论','车辆工程'],
'电气工程':['电力系统及其自动化','高电压与绝缘技术','电力电子与电力传动','电工理论与新技术'],
'计算机科学与技术': ['计算机系统结构','计算机软件与理论','计算机应用技术'],
'土木工程': ['岩土工程', '结构工程','市政工程','防灾减灾工程及防护工程','桥梁与隧道工程'],
'地质资源与地质工程': ['矿产普查与勘探', '地球探测与信息技术','地质工程']
}
}
current_menu_dict=menu_data #存放当前级及后续各级菜单的嵌套字典,在最低级时为一个列表
upper_menu_list=[] #存放比当前级更高级别的所有菜单字典的列表,最后一个元素比current_menu_dict多一层父菜单
temp_menu=[] #存放当前级菜单的一个临时列表
while(True):
for i,subject in enumerate(current_menu_dict): #循环显示出当前菜单的索引和菜单项
if type(current_menu_dict) == dict: #如果当前菜单不是最低一级菜单,则显示索引和菜单项
print(''.join(['\t'*len(upper_menu_list),'[',str(i),']',subject]))
else: #如果当前菜单是最低一级菜单则只显示菜单项,不显示索引
print(''.join(['\t'*len(upper_menu_list),subject]))
temp_menu.append(subject)
choice=input(''.join(['\t'*len(upper_menu_list),'>>>'])) #输入选项
if choice.isdigit(): #如果输入选项是菜单项对应的数字索引,则进入该菜单项下一级菜单
if type(current_menu_dict) == dict: #如果当前菜单不是最低一级菜单,则通过输入数字索引进入对应菜单项的下一级菜单
index = int(choice)
if index >= 0 and index < len(temp_menu):
key = temp_menu[index]
upper_menu_list.append(current_menu_dict) #如果输入数字包含在菜单项索引中,则高级别菜单列表添加当前菜单为其最后一个元素,而当前菜单进入索引对应的下一级菜单
current_menu_dict = current_menu_dict[key]
else:
print('输入错误数字,请重新输入!')
else:
print('已是最低级菜单,按b键退回上级菜单,按q键退出!')
elif choice=='b': #如果输入选项是"b",则退回到上一级菜单
if len(upper_menu_list) > 0: #如果当前菜单不是最高级菜单,取高级别菜单列表中的最后一个元素为当前菜单字典
current_menu_dict=upper_menu_list.pop()
else: #如果当前菜单已是最高级菜单,不能回退
print('已是最高级菜单,不能回退,按数字键选择菜单项进入子菜单,按q键退出')
elif choice=='q': #如果输入选项是"q",则退出菜单
print('退出菜单!'.center(50,'*'))
exit()
else:
print('输入错误,请重新输入')
temp_menu=[]
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Python
# 三级菜单
# 菜单
# Python3实现的简单三级菜单功能示例
# 使用python实现省市三级菜单效果
# Python字典实现简单的三级菜单(实例讲解)
# Python三级菜单的实例
# Python自动化开发学习之三级菜单制作
# python之wxPython菜单使用详解
# python递归查询菜单并转换成json实例
# Python基于win32ui模块创建弹出式菜单示例
# Python3.5实现的三级菜单功能示例
# 菜单项
# 已是
# 地球物理学
# 键值
# 数字键
# 即为
# 阿拉伯语
# 中国
# 退到
# 及其自动化
# 重新输入
# 微生物学
# 概率论
# 分析化学
# 有机化学
# 物理化学
# 信息技术
# 为其
# 只显示
# 土木工程
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
浅述节点的创建及常见功能的实现
zabbix利用python脚本发送报警邮件的方法
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
如何快速搭建虚拟主机网站?新手必看指南
在线制作视频网站免费,都有哪些好的动漫网站?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
简单实现Android文件上传
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
Laravel如何创建自定义Facades?(详细步骤)
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
如何在阿里云香港服务器快速搭建网站?
PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】
html5的keygen标签为什么废弃_替代方案说明【解答】
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
如何确保西部建站助手FTP传输的安全性?
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
iOS UIView常见属性方法小结
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
如何正确选择百度移动适配建站域名?
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】
如何在橙子建站上传落地页?操作指南详解
详解Oracle修改字段类型方法总结
如何在 React 中条件性地遍历数组并渲染元素
如何基于云服务器快速搭建个人网站?
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
详解jQuery停止动画——stop()方法的使用
Laravel如何保护应用免受CSRF攻击?(原理和示例)
jQuery 常见小例汇总
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
JavaScript实现Fly Bird小游戏
如何在IIS中新建站点并配置端口与物理路径?
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
详解Android图表 MPAndroidChart折线图
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
如何在IIS中新建站点并配置端口与IP地址?
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
如何在Tomcat中配置并部署网站项目?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
网站制作免费,什么网站能看正片电影?
JavaScript常见的五种数组去重的方式
如何用wdcp快速搭建高效网站?
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程

