標籤: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--類比三級菜單