本文实例为大家分享了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,三级菜单,菜单
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]