Python程序练习2--模拟三级菜单

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.代码

 1 # Author:Byron Li
 2
 3 menu_data={
 4     ‘文学‘:
 5         {
 6             ‘中国语言文学‘:[‘语言学及应用语言学‘,‘汉语言文字学‘,‘中国古代文学‘,‘中国现当代文学‘],
 7             ‘外国语言文学‘:[‘英语语言文学‘,‘亚非语言文学‘,‘阿拉伯语语言文学‘,‘外国语言学及应用语言学‘],
 8             ‘新闻传播学‘: [‘新闻学‘, ‘传播学‘],
 9             ‘艺术学‘: [‘音乐学‘, ‘美术学‘,‘戏剧戏曲学‘,‘电影学‘,‘舞蹈学‘]
10         },
11
12     ‘理学‘:
13         {
14             ‘数学‘:[‘基础数学‘,‘计算数学‘,‘概率论与数理统计‘,‘应用数学‘,‘运筹学与控制论‘],
15             ‘物理学‘:[‘理论物理‘,‘粒子物理与原子核物理‘,‘原子与分子物理‘,‘等离子体物理‘,‘无线电物理‘],
16             ‘化学‘: [‘无机化学‘,‘分析化学‘,‘有机化学‘,‘物理化学‘,‘高分子化学与物理‘],
17             ‘生物学‘: [‘植物学‘, ‘动物学‘,‘生理学‘,‘微生物学‘,‘遗传学‘],
18             ‘地球物理学‘: [‘固体地球物理学‘, ‘空间物理学‘]
19         },
20     ‘工学‘:
21         {
22             ‘机械工程‘:[‘机械制造及其自动化‘,‘机械电子工程‘,‘机械设计及理论‘,‘车辆工程‘],
23             ‘电气工程‘:[‘电力系统及其自动化‘,‘高电压与绝缘技术‘,‘电力电子与电力传动‘,‘电工理论与新技术‘],
24             ‘计算机科学与技术‘: [‘计算机系统结构‘,‘计算机软件与理论‘,‘计算机应用技术‘],
25             ‘土木工程‘: [‘岩土工程‘, ‘结构工程‘,‘市政工程‘,‘防灾减灾工程及防护工程‘,‘桥梁与隧道工程‘],
26             ‘地质资源与地质工程‘: [‘矿产普查与勘探‘, ‘地球探测与信息技术‘,‘地质工程‘]
27         }
28 }
29
30 current_menu_dict=menu_data   #存放当前级及后续各级菜单的嵌套字典,在最低级时为一个列表
31 upper_menu_list=[]            #存放比当前级更高级别的所有菜单字典的列表,最后一个元素比current_menu_dict多一层父菜单
32 temp_menu=[]                  #存放当前级菜单的一个临时列表
33
34 while(True):
35     for i,subject in enumerate(current_menu_dict):                 #循环显示出当前菜单的索引和菜单项
36         if type(current_menu_dict) == dict:                        #如果当前菜单不是最低一级菜单,则显示索引和菜单项
37            print(‘‘.join([‘\t‘*len(upper_menu_list),‘[‘,str(i),‘]‘,subject]))
38
39         else:                                                      #如果当前菜单是最低一级菜单则只显示菜单项,不显示索引
40             print(‘‘.join([‘\t‘*len(upper_menu_list),subject]))
41         temp_menu.append(subject)
42
43     choice=input(‘‘.join([‘\t‘*len(upper_menu_list),‘>>>‘]))      #输入选项
44     if choice.isdigit():                                            #如果输入选项是菜单项对应的数字索引,则进入该菜单项下一级菜单
45         if type(current_menu_dict) == dict:                         #如果当前菜单不是最低一级菜单,则通过输入数字索引进入对应菜单项的下一级菜单
46             index = int(choice)
47             if index >= 0 and index < len(temp_menu):
48                 key = temp_menu[index]
49                 upper_menu_list.append(current_menu_dict)           #如果输入数字包含在菜单项索引中,则高级别菜单列表添加当前菜单为其最后一个元素,而当前菜单进入索引对应的下一级菜单
50                 current_menu_dict = current_menu_dict[key]
51             else:
52                 print(‘输入错误数字,请重新输入!‘)
53         else:
54             print(‘已是最低级菜单,按b键退回上级菜单,按q键退出!‘)
55     elif choice==‘b‘:                                            #如果输入选项是"b",则退回到上一级菜单
56         if len(upper_menu_list) > 0:                              #如果当前菜单不是最高级菜单,取高级别菜单列表中的最后一个元素为当前菜单字典
57             current_menu_dict=upper_menu_list.pop()
58         else:                                                    #如果当前菜单已是最高级菜单,不能回退
59             print(‘已是最高级菜单,不能回退,按数字键选择菜单项进入子菜单,按q键退出‘)
60     elif choice==‘q‘:                                            #如果输入选项是"q",则退出菜单
61         print(‘退出菜单!‘.center(50,‘*‘))
62         exit()
63     else:
64         print(‘输入错误,请重新输入‘)
65     temp_menu=[]

时间: 2024-08-24 16:55:54

Python程序练习2--模拟三级菜单的相关文章

python学习基础篇--编写三级菜单

#!/usr/bin/env python #-*- coding:utf-8 -*- #------------------------------------------------------ #制作一个三级菜单,要求: #可以依次选择,进入到相应的菜单 #可以在任意层执行返回上一次或者退出 #------------------------------------------------------- print("省市区县三级菜单展示") dic= { '陕西省':{ '西安

Python初学者第十三天三级菜单程序小作业

13day 作业题目: 三级菜单 作业需求: 数据结构: menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家':{}, 'youku':{}, }, '上地':{ '百度':{}, }, }, '昌平':{ '沙河':{ '老男孩':{}, '北航':{}, }, '天通苑':{}, '回龙观':{}, }, '朝阳':{}, '东城':{}, }, '上海':{ '闵

Python自动化开发—EX.2(三级菜单)

#!/usr/bin/env python # -*- coding: utf-8 -*- # Author:DaShuang.Gu #三级菜单 data = { '北京':{ "昌平":{ "沙河":["oldboy","test"], "天通苑":["链家地产","我爱我家"] }, "朝阳":{ "望京":["奔

python实战演练(二)三级菜单

一.实现功能 1. 运行程序输出第一级菜单 2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单 3. 菜单数据保存在文件中 4. 让用户选择是否要退出 5. 有返回上一级菜单的功能 二,流程图 #-*- Coding:utf-8 -*- # Author: kking ''' 作业需求: 1. 运行程序输出第一级菜单 2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单 3. 菜单数据保存在文件中 4. 让用户选择是否要退出 5. 有返回上一级菜单的功能 ''' import sys da

Python之双色球选购和三级菜单问题

1:双色球选购# 1 双色球(假设一共八个球,6个红球,球号1-32.2个蓝球,球号1-16)# 2 确保用户不能重复选择,不能超出范围# 3 用户输入有误时有相应的错误提示# 4 最后展示用户选择的双色球的号码 select_red_ball = []while True:    n = int(input('请输入你要选择的红色球(1-32):'))    if 0 < n < 33:        if n not in select_red_ball:            selec

学习Python的第二十天【三级菜单】高级版

------------恢复内容开始------------ 三级菜单要求:1.可以一层一层的进入到所有层:2.可以在每一层返回上一层:输入b3.可以在任意层退出 主菜单:输入q #初级:(原始代码) #__author:"hanhankeji" #date: 2019/12/11 menu = { "北京":{ "朝阳":{ "国贸":{ "CICC":{}, "hp":{}, &qu

Python字典实现简单的三级菜单

data = { "北京":{ "昌平":{"沙河":["oldboy","test"],"天通苑":["链接地产","我爱我家"]}, "朝阳":{"望京":["奔驰","陌陌"],"国贸":["CICC","HP&q

python学习之路-练习小程序03(三级菜单)

需求: 可依次选择进入各子菜单 可从任意一层往回退到上一层 可从任意一层退出程序 所需新知识点:列表.字典 1.基础版: #!/usr/bin/env python # -*- coding:utf-8 -*- #Author:zengwenhai # 三级菜单 menu = { '湖南省':{ '郴州市':{ '嘉禾县':{ '珠泉镇':{}, '袁家镇':{}, '泮头乡':{} }, '汝城县':{ '土桥镇':{}, '永丰乡':{}, '田庄':{} }, '安仁县':{ '灵官镇':

三级菜单的实现(python程序)

这是刚开始写程序,三级菜单的程序基本是用字典实现,很low,以后学习了其他更好的东西,我会继续上传,然后争取在我水平高深之后,把这个简单的东西实现的狠高大上. _author_ = "zhanzhengrecheng" data={ "陕西":{ "宝鸡":{"扶风县":["段家镇","城关镇"],}, "渭南":{}, "延安":{}, &quo