Python程式練習2--類比三級菜單

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.