Python模擬三級菜單效果
本文實例為大家分享了Python模擬三級菜單效果的具體代碼,供大家參考,具體內(nèi)容如下
1.功能簡介
此程序模擬多級菜單操作,實現(xiàn)按菜單項對應(yīng)數(shù)字索引進入下級菜單,按b鍵回退到上一級菜單,按q鍵退出菜單。并用一個簡化的學(xué)科專業(yè)目錄進行了三級菜單測試,實際上此程序可適用任意多級菜單操作。
2.實現(xiàn)方法
本程序采用python語言編寫,為了高效實現(xiàn)菜單操作,減少循環(huán)次數(shù),關(guān)鍵定義了如下三個變量:
current_menu_dict:非最低級菜單時為一個嵌套字典,在最低級菜單時為一個列表,存放當(dāng)前級及后續(xù)各級菜單。
upper_menu_list:一個列表,存放比當(dāng)前級更高級別的所有菜單嵌套字典的列表,最后一個元素比current_menu_dict多一層父菜單。
temp_menu:一個列表,只存放當(dāng)前級的菜單,即為current_menu_dict的鍵值。
菜單操作過程:
(1)按數(shù)字鍵進入對應(yīng)的下級菜單:數(shù)字鍵是temp_menu的索引,根據(jù)索引提取當(dāng)前菜單項,即為current_menu_dict的一個鍵值,據(jù)此current_menu_dict可重新指向該鍵值對應(yīng)的下一級菜單嵌套字典,不過在進入下級菜單之前,upper_menu_list.append(current_menu_dict)先把當(dāng)前菜單嵌套字典添加為upper_menu_list的最后一個元素,為回退做準(zhǔn)備。
(2)按b鍵回退到上一級菜單:回退時current_menu_dict=upper_menu_list.pop()獲取上一級菜單嵌套字典,實現(xiàn)回退。
(3)按q鍵退出菜單:按q鍵時調(diào)用exit()退出程序。
簡例示意:假設(shè)三級菜單字典為{一級菜單:{二級菜單:三級菜單}},如果當(dāng)前菜單在第二級,此時
current_menu_dict={二級菜單:三級菜單}
upper_menu_list=[{一級菜單:{二級菜單:三級菜單}}]
temp_menu=[二級菜單]
3.流程圖
4.代碼
# Author:Byron Li menu_data={ '文學(xué)': { '中國語言文學(xué)':['語言學(xué)及應(yīng)用語言學(xué)','漢語言文字學(xué)','中國古代文學(xué)','中國現(xiàn)當(dāng)代文學(xué)'], '外國語言文學(xué)':['英語語言文學(xué)','亞非語言文學(xué)','阿拉伯語語言文學(xué)','外國語言學(xué)及應(yīng)用語言學(xué)'], '新聞傳播學(xué)': ['新聞學(xué)', '傳播學(xué)'], '藝術(shù)學(xué)': ['音樂學(xué)', '美術(shù)學(xué)','戲劇戲曲學(xué)','電影學(xué)','舞蹈學(xué)'] }, '理學(xué)': { '數(shù)學(xué)':['基礎(chǔ)數(shù)學(xué)','計算數(shù)學(xué)','概率論與數(shù)理統(tǒng)計','應(yīng)用數(shù)學(xué)','運籌學(xué)與控制論'], '物理學(xué)':['理論物理','粒子物理與原子核物理','原子與分子物理','等離子體物理','無線電物理'], '化學(xué)': ['無機化學(xué)','分析化學(xué)','有機化學(xué)','物理化學(xué)','高分子化學(xué)與物理'], '生物學(xué)': ['植物學(xué)', '動物學(xué)','生理學(xué)','微生物學(xué)','遺傳學(xué)'], '地球物理學(xué)': ['固體地球物理學(xué)', '空間物理學(xué)'] }, '工學(xué)': { '機械工程':['機械制造及其自動化','機械電子工程','機械設(shè)計及理論','車輛工程'], '電氣工程':['電力系統(tǒng)及其自動化','高電壓與絕緣技術(shù)','電力電子與電力傳動','電工理論與新技術(shù)'], '計算機科學(xué)與技術(shù)': ['計算機系統(tǒng)結(jié)構(gòu)','計算機軟件與理論','計算機應(yīng)用技術(shù)'], '土木工程': ['巖土工程', '結(jié)構(gòu)工程','市政工程','防災(zāi)減災(zāi)工程及防護工程','橋梁與隧道工程'], '地質(zhì)資源與地質(zhì)工程': ['礦產(chǎn)普查與勘探', '地球探測與信息技術(shù)','地質(zhì)工程'] } } current_menu_dict=menu_data #存放當(dāng)前級及后續(xù)各級菜單的嵌套字典,在最低級時為一個列表 upper_menu_list=[] #存放比當(dāng)前級更高級別的所有菜單字典的列表,最后一個元素比current_menu_dict多一層父菜單 temp_menu=[] #存放當(dāng)前級菜單的一個臨時列表 while(True): for i,subject in enumerate(current_menu_dict): #循環(huán)顯示出當(dāng)前菜單的索引和菜單項 if type(current_menu_dict) == dict: #如果當(dāng)前菜單不是最低一級菜單,則顯示索引和菜單項 print(''.join(['\t'*len(upper_menu_list),'[',str(i),']',subject])) else: #如果當(dāng)前菜單是最低一級菜單則只顯示菜單項,不顯示索引 print(''.join(['\t'*len(upper_menu_list),subject])) temp_menu.append(subject) choice=input(''.join(['\t'*len(upper_menu_list),'>>>'])) #輸入選項 if choice.isdigit(): #如果輸入選項是菜單項對應(yīng)的數(shù)字索引,則進入該菜單項下一級菜單 if type(current_menu_dict) == dict: #如果當(dāng)前菜單不是最低一級菜單,則通過輸入數(shù)字索引進入對應(yīng)菜單項的下一級菜單 index = int(choice) if index >= 0 and index < len(temp_menu): key = temp_menu[index] upper_menu_list.append(current_menu_dict) #如果輸入數(shù)字包含在菜單項索引中,則高級別菜單列表添加當(dāng)前菜單為其最后一個元素,而當(dāng)前菜單進入索引對應(yīng)的下一級菜單 current_menu_dict = current_menu_dict[key] else: print('輸入錯誤數(shù)字,請重新輸入!') else: print('已是最低級菜單,按b鍵退回上級菜單,按q鍵退出!') elif choice=='b': #如果輸入選項是"b",則退回到上一級菜單 if len(upper_menu_list) > 0: #如果當(dāng)前菜單不是最高級菜單,取高級別菜單列表中的最后一個元素為當(dāng)前菜單字典 current_menu_dict=upper_menu_list.pop() else: #如果當(dāng)前菜單已是最高級菜單,不能回退 print('已是最高級菜單,不能回退,按數(shù)字鍵選擇菜單項進入子菜單,按q鍵退出') elif choice=='q': #如果輸入選項是"q",則退出菜單 print('退出菜單!'.center(50,'*')) exit() else: print('輸入錯誤,請重新輸入') temp_menu=[]
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python常用標(biāo)準(zhǔn)庫詳解(pickle序列化和JSON序列化)
這篇文章主要介紹了Python常用標(biāo)準(zhǔn)庫,主要包括pickle序列化和JSON序列化模塊,通過使用場景分析給大家介紹的非常詳細,需要的朋友可以參考下2022-05-05Pycharm安裝第三方庫時Non-zero exit code錯誤解決辦法
這篇文章主要介紹了Pycharm安裝第三方庫時Non-zero exit code錯誤解決辦法,最好的解決辦法可以通過“Pycharm”左下角的“Terminal”,在pycharm內(nèi)使用pip安裝,以安裝“requests”為例,需要的朋友可以參考下2023-01-01Python把excel文件數(shù)據(jù)轉(zhuǎn)化為字典格式存儲詳解
這篇文章主要介紹了Python把excel文件數(shù)據(jù)轉(zhuǎn)化為字典格式存儲詳解,在Python中有時候需要操作excel表格的數(shù)據(jù),把excel表格轉(zhuǎn)化為字典存起來,方便讀取,今天我們就來看看如何轉(zhuǎn)換,需要的朋友可以參考下2023-08-08PyTorch中Tensor的數(shù)據(jù)類型和運算的使用
這篇文章主要介紹了PyTorch中Tensor的數(shù)據(jù)類型和運算的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Python3基礎(chǔ)之條件與循環(huán)控制實例解析
這篇文章主要介紹了Python3基礎(chǔ)的條件與循環(huán)控制,需要的朋友可以參考下2014-08-08Python學(xué)習(xí)筆記之While循環(huán)用法分析
這篇文章主要介紹了Python學(xué)習(xí)筆記之While循環(huán)用法,結(jié)合具體實例形式分析了while循環(huán)的原理、用法及相關(guān)操作注意事項,需要的朋友可以參考下2019-08-08解讀FastAPI異步化為transformers模型打造高性能接口
這篇文章主要介紹了解讀FastAPI異步化為transformers模型打造高性能接口問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06