Python模拟三级菜单效果


Posted in Python onSeptember 11, 2017

本文实例为大家分享了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.流程图

Python模拟三级菜单效果

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 相关文章推荐
python高并发异步服务器核心库forkcore使用方法
Nov 26 Python
Python中的作用域规则详解
Jan 30 Python
Python利用多进程将大量数据放入有限内存的教程
Apr 01 Python
Python更新数据库脚本两种方法及对比介绍
Jul 27 Python
Python进阶之尾递归的用法实例
Jan 31 Python
Python回文字符串及回文数字判定功能示例
Mar 20 Python
python安装twisted的问题解析
Aug 21 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
Nov 07 Python
Python configparser模块配置文件过程解析
Mar 03 Python
新手常见Python错误及异常解决处理方案
Jun 18 Python
Python如何在bool函数中取值
Sep 21 Python
解决Django transaction进行事务管理踩过的坑
Apr 24 Python
轻量级的Web框架Flask 中模块化应用的实现
Sep 11 #Python
Python 模拟购物车的实例讲解
Sep 11 #Python
python添加模块搜索路径方法
Sep 11 #Python
解决Django模板无法使用perms变量问题的方法
Sep 10 #Python
python实现批量修改文件名代码
Sep 10 #Python
python中利用队列asyncio.Queue进行通讯详解
Sep 10 #Python
Python上下文管理器和with块详解
Sep 09 #Python
You might like
php实现的仿阿里巴巴实现同类产品翻页
2009/12/11 PHP
一个显示效果非常不错的PHP错误、异常处理类
2014/03/21 PHP
遍历echsop的region表形成缓存的程序实例代码
2016/11/01 PHP
thinkPHP多语言切换设置方法详解
2016/11/11 PHP
thinkPHP模板引擎用法示例
2016/12/08 PHP
laravel ORM关联关系中的 with和whereHas用法
2019/10/16 PHP
php实现商城购物车的思路和源码分析
2020/07/23 PHP
javascript 广告后加载,加载完页面再加载广告
2010/11/25 Javascript
Jquery增加鼠标中间功能mousewheel的实例代码
2013/09/05 Javascript
jquery datepicker参数介绍和示例
2014/04/15 Javascript
使用纯javascript实现放大镜效果
2015/03/18 Javascript
基于JavaScript怎么实现让歌词滚动播放
2015/11/03 Javascript
javascript字符串函数汇总
2015/12/06 Javascript
jquery根据name取得select选中的值实例(超简单)
2018/01/25 jQuery
值得收藏的八个常用的js正则表达式
2018/10/19 Javascript
js实现聊天对话框
2020/02/08 Javascript
JS原型prototype和__proto__用法实例分析
2020/03/14 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
40行代码把Vue3的响应式集成进React做状态管理
2020/05/20 Javascript
JS PHP字符串截取函数实现原理解析
2020/08/29 Javascript
vue实现登录功能
2020/12/31 Vue.js
[35:26]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第三局
2016/02/26 DOTA
[36:43]NB vs Optic 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
[01:28]国服启动器接入蒸汽平台操作流程视频
2021/03/11 DOTA
python kmeans聚类简单介绍和实现代码
2018/02/23 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
2019/06/27 Python
Python爬虫 bilibili视频弹幕提取过程详解
2019/07/31 Python
TensorFlow绘制loss/accuracy曲线的实例
2020/01/21 Python
使用Python爬虫爬取小红书完完整整的全过程
2021/01/19 Python
举例详解CSS3中的Transition
2015/07/15 HTML / CSS
丹尼尔惠灵顿手表天猫官方旗舰店:Daniel Wellington
2017/08/25 全球购物
工程部经理岗位职责
2013/12/08 职场文书
网络信息管理员岗位职责
2014/01/05 职场文书
中学教师暑期培训方案
2014/08/27 职场文书
狂人日记读书笔记
2015/06/30 职场文书
《火纹风花雪月无双》预告“神秘雇佣兵” 紫发剑客
2022/04/13 其他游戏