Python程序練習2--模擬三級菜單

1.功能簡介

此程序模擬多級菜單操做,實現按菜單項對應數字索引進入下級菜單,按b鍵回退到上一級菜單,按q鍵退出菜單。並用一個簡化的學科專業目錄進行了三級菜單測試,實際上此程序可適用任意多級菜單操做。python

 

2.實現方法

本程序採用python語言編寫,爲了高效實現菜單操做,減小循環次數,關鍵定義了以下三個變量:git

  • 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()退出程序。app

簡例示意:假設三級菜單字典爲{一級菜單:{二級菜單:三級菜單}},若是當前菜單在第二級,此時 
current_menu_dict={二級菜單:三級菜單} 
upper_menu_list=[{一級菜單:{二級菜單:三級菜單}}] 
temp_menu=[二級菜單]ide

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
相關文章
相關標籤/搜索