侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Python模拟三级菜单效果

Python  /  管理员 发布于 7年前   172

本文实例为大家分享了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 Limenu_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 模拟购物车的实例讲解
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(95个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客