码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-09-05 21:51:05      阅读:268      评论:0      收藏:0      [点我收藏+]

标签:sdi   src   splay   三级菜单   png   closed   舞蹈   测试   子菜单   

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=[]
View Code

 

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

标签:sdi   src   splay   三级菜单   png   closed   舞蹈   测试   子菜单   

原文地址:http://www.cnblogs.com/byron-li/p/7481809.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!