您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Python讀取yaml文件多層菜單的示例,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
Python是一種編程語言,內置了許多有效的工具,Python幾乎無所不能,該語言通俗易懂、容易入門、功能強大,在許多領域中都有廣泛的應用,例如最熱門的大數據分析,人工智能,Web開發等。
需要用到的Python知識點
Python的對象屬性方法;
用到字典{key:value}值的提取;
列表的增加;
if循環結合break的使用;
yaml文件讀取;
代碼如下:
#!/usr/bin/python34 import sys,os,re,yaml,time #reload(sys) #sys.setdefaultencoding('utf-8') ######################對input輸入字符類型判斷并轉化##################### def input_handle(s): if str.isdigit(s): ###對輸入是否是數字進行判斷 s = int(s) ###如果輸出的是個數字,則轉化為整數類型 return s # try: # eval(s) ###eval將字符串str當成有效的表達式來求值并返回計算結果 # except NameError: ###名稱錯誤 # return s # except SyntaxError: ###語法錯誤 # return s # else: # return eval(s) ####################框架函數###################### def framework(province='',city='',county=''): os.system('cls') ###清屏### print(''' ****************************************************************** * * * 歡迎訪問全國省市查詢系統 * * * ****************************************************************** +----------------------------------------------------------------- | 省份: %s | | 市(區): %s | | 縣(區): %s +----------------------------------------------------------------- ''' % (province,city,county)) ######################輸出展示函數################# def show(province_name='',city_name='',county_name=''): output= ''' ****************************************************************** * * 美麗的%s %s %s * 歡迎您 * 這里的山美,水美,妹子更美 * * ****************************************************************** ''' print(output % (province_name,city_name,county_name)) ###################菜單第一層省份或直轄市輸出函數################# def province_show(province_list): ############申明全局變量#################### global P_NAME global C_NAME global X_NAME global FLAG_M province_dict = {} ############對省份或直轄市列表參數進行遍歷并加上數字編號############### for k,v in enumerate(province_list,1): province_dict[k] = v print('%d . %s' % (k,v) + '\t',end='') ###加上end參數,取消默認換行### if k % 4 == 0: ###按4列換行### print() print('\n================================================================') print('q : Exit') ###############鍵盤讀入編號或省份,可以輸入漢字################# province_index = input('請輸入編號或省份 : ') ###############如果輸入非空,對輸入進行判斷并轉化類型########### if len(province_index) != 0: province_index = input_handle(province_index) if province_index == 'q': ###如果輸入為q,則退出程序### sys.exit(0) elif province_index in province_dict.keys(): ###如果輸入為數字編號,則從字典中獲取具體省份或直轄市名稱### P_NAME = province_dict[province_index] ###對全局變量賦值省份名稱### elif province_index in province_dict.values(): ###如果輸入為具體省份,則從字典中獲取具體省份或直轄市名稱### P_NAME = province_index ###對全局變量賦值省份名稱### else: P_NAME = '' ###輸入其他字符,賦值全局變量為空### while P_NAME: ###全局變量不為空進行循環### framework(P_NAME,C_NAME,X_NAME) ###調用框架### if type(yaml_dict[P_NAME]) is list: city_show(P_NAME) ###調用城市函數,并傳入省份值### if FLAG_M == 'b': ###城市函數輸入b,返回上一層,重新選擇省份### break else: show(P_NAME) ###調用輸出展示函數### time.sleep(5) P_NAME = '' break else: print('輸入錯誤,請重新輸入!') ###P_NAME為空,即輸入錯誤,重新輸入### time.sleep(2) ##############菜單第二層城市輸出函數####################### def city_show(province_name): ############申明全局變量############### global P_NAME global C_NAME global X_NAME global FLAG_M city_name = '' ###定義城市變量默認為空### city_list = yaml_dict[province_name] ###定義賦值城市列表### city_dict = {} ###定義城市編號和名稱字典### city_county_dict = {} ###定義地級市和下屬區縣字典### ############對城市列表參數進行遍歷并加上數字編號############### for k,v in enumerate(city_list,1): if type(v) is str: ###直轄市只有二層菜單,第二層為直接的各區或縣,值類型為具體字符### city_dict[k] = v ###對直轄市下的區或縣進行新字典賦值,方便查詢和展示### print('%d . %s' % (k,v) + '\t',end='') ###末尾加',',取消默認換行### elif type(v) is dict: ###其他省份有三層菜單,第二層為各地級市,值類型字典### for kk,vv in v.items(): ###對地級市的字典進行遍歷### city_dict[k] = kk ###對其他省份下的地級市進行新字典賦值,方便查詢和展示### city_county_dict[kk] = vv ###對二層地級市和三層縣市重新賦值新字典### print('%d . %s' % (k,kk) + '\t',end='') ###加上end參數,取消默認換行### else: pass if k % 4 == 0: ###按4列換行### print() print('\n================================================================') print('q : Exit b : Back') ###############鍵盤讀入編號或區市,可以輸入漢字################# city_index = input('請輸入編號或區市 : ') ###############如果輸入非空,對輸入進行判斷并轉化類型########### if len(city_index) != 0: city_index = input_handle(city_index) if city_index == 'q': ###如果輸入為q,則退出程序### sys.exit(0) elif city_index == 'b': ###如果輸入為b,則返回上一層,重新選擇省份或直轄市### (P_NAME,C_NAME,FLAG_M) = ('','','b') ###全局變量P_NAME,C_NAME設置為空,FLAG_M設置為b,則返回上一層### return ###直接返回,不進行函數以下的操作### elif city_index in city_dict.keys(): ###如果輸入為數字編號,則從字典中獲取具體城市名稱### city_name = city_dict[city_index] ###賦值地級市的名稱,并對全局變量進行賦值### (P_NAME,C_NAME,FLAG_M) = (province_name,city_name,'') elif city_index in city_dict.values(): ###如果輸入為城市名稱,則從字典中獲取具體省份名稱### city_name = city_index ###賦值地級市的名稱,并對全局變量進行賦值### (P_NAME,C_NAME,FLAG_M) = (province_name,city_name,'') else: pass ###如果輸入其他字符,則不做任何操作### if city_name: ###如果地級市名字不為空,即鍵盤輸入為要求字符### if city_name in city_county_dict.keys(): ###判斷是省份的地級市名字### while C_NAME: ###環境變量C_NAME不為空### framework(P_NAME,C_NAME,X_NAME) ###調用框架函數,并將省份名字和地級市名字傳入### ###調用三層區縣顯示函數,并傳入具體變量### county_show(P_NAME,C_NAME,city_county_dict[city_name]) if FLAG_N == 'b': ###三層區縣函數輸入b,返回上一層,重新選擇地級市### break else: print('輸入錯誤,請重新輸入!') ###C_NAME為空,即輸入錯誤,重新輸入### time.sleep(2) else: ###判斷是直轄市的區或縣名字### show(P_NAME,C_NAME) ###調用輸出展示函數### time.sleep(5) else: ###輸入非要求字符,提示重新輸入### print('輸入錯誤,請重新輸入!') time.sleep(2) ##############菜單第三層區縣輸出函數####################### def county_show(province_name,city_name,county_list): ############申明全局變量#################### global P_NAME global C_NAME global X_NAME global FLAG_N county_name = '' ###定義三級區縣變量默認為空### county_dict = {} ##定義賦值區縣字典### ############對區縣列表參數進行遍歷并加上數字編號############### for k,v in enumerate(county_list,1): if type(v) is str: ###第三層為直接的各區或縣,值類型為具體字符str### county_dict[k] = v ###對區或縣進行新字典賦值,方便查詢和展示### print('%d . %s' % (k,v) + '\t',end='') ###加上end參數,取消默認換行### if k % 4 == 0: ###按4列換行### print() print('\n================================================================') print('q : Exit b : Back') ###############鍵盤讀入編號或區縣,可以輸入漢字################# county_index = input('請輸入編號或區縣 : ') ###############如果輸入非空,對輸入進行判斷并轉化類型########### if len(county_index) != 0: county_index = input_handle(county_index) if county_index == 'q': ###如果輸入為q,則退出程序### sys.exit(0) elif county_index == 'b': ###如果輸入為b,則返回上一層,重新選擇第二層地級市### (P_NAME,C_NAME,X_NAME,FLAG_N) = (province_name,'','','b') ###全局變量C_NAME設置為空,FLAG_M設置為b,則返回上一層### return ###直接返回,不進行函數以下的操作### elif county_index in county_dict.keys(): ###如果輸入為數字編號,則從字典中獲取具體區縣名稱### county_name = county_dict[county_index] ###賦值區縣的名稱,并對全局變量進行賦值### (P_NAME,C_NAME,X_NAME,FLAG_N) = (province_name,city_name,county_name,'') elif county_index in county_dict.values(): ###如果輸入為區縣名稱,則從字典中獲取具體區縣名稱### county_name = county_index ###賦值區縣的名稱,并對全局變量進行賦值### (P_NAME,C_NAME,X_NAME,FLAG_N) = (province_name,city_name,county_name,'') else: ###如果輸入其他字符,則不做任何操作### (P_NAME,C_NAME,X_NAME,FLAG_N) = (province_name,city_name,'','') if county_name: ###如果區縣名字不為空,即鍵盤輸入為要求字符### show(P_NAME,C_NAME,X_NAME) ###調用輸出展示函數### time.sleep(5) else: print('輸入錯誤,請重新輸入!') ###輸入非要求字符,提示重新輸入### time.sleep(2) ##########################################主程序############################### ###############讀取yaml格式文件####################### fd = open(r'G:\sicps\test\pro',encoding='utf-8') yaml_dict = yaml.load(fd) ###############定義全局變量########################### P_NAME = '' ###省份或直轄市全局變量### C_NAME = '' ###各省地級市或直轄市區縣的全局變量### X_NAME = '' ###各省地級市下的區或縣 全局變量### FLAG_M = '' ###退出菜單第二層,返回上一層循環的變量### FLAG_N = '' ###退出菜單第三層,返回上一層循環的變量### ###############獲取省份或直轄市的列表################# prov_list = yaml_dict.keys() ###############主循環開始############################# while True: framework(P_NAME,C_NAME,X_NAME) ###調用框架函數,顯示初始狀態### province_show(prov_list) ###調用第一層省份或直轄市輸出函數###
關于“Python讀取yaml文件多層菜單的示例”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。