Python实现多级菜单交互:支持回退与退出功能
本文详细介绍使用Python模拟多级菜单的操作方法,通过嵌套字典与列表管理菜单层级。程序支持按数字索引进入下级菜单、按b键回退至上一级、按q键退出。核心逻辑利用current_menu_dict、upper_menu_list和temp_menu三个变量高效处理层级跳转与状态保存,适用于任意层级的菜单交互场景。
本文分享了一段使用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键回退至上一级菜单:当用户按下b键时,程序执行current_menu_dict=upper_menu_list.pop(),从upper_menu_list中弹出最后一个元素(即上一级菜单嵌套字典)并赋值给current_menu_dict,从而实现回退。 (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=[]
以上就是本文的全部内容,希望对读者的学习有所帮助,同时也欢迎大家继续支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









