本文实例为大家分享了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.代码
1
2
3
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
# 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 = [] |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://www.cnblogs.com/byron-li/p/7481809.html