中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python讀取yaml文件多層菜單的示例

發布時間:2021-05-11 10:31:01 來源:億速云 閱讀:235 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關Python讀取yaml文件多層菜單的示例,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

python可以做什么

Python是一種編程語言,內置了許多有效的工具,Python幾乎無所不能,該語言通俗易懂、容易入門、功能強大,在許多領域中都有廣泛的應用,例如最熱門的大數據分析,人工智能,Web開發等。

需要用到的Python知識點

  1. Python的對象屬性方法;

  2. 用到字典{key:value}值的提取;

  3. 列表的增加;

  4. if循環結合break的使用;

  5. 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文件多層菜單的示例”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

金平| 宝清县| 巫山县| 鹰潭市| 瓮安县| 新绛县| 广州市| 宝兴县| 垦利县| 始兴县| 卓资县| 靖西县| 玛曲县| 高唐县| 前郭尔| 马尔康县| 梁河县| 皮山县| 长汀县| 宣汉县| 尤溪县| 镇康县| 宽城| 临江市| 荣成市| 津市市| 钟山县| 泗水县| 招远市| 穆棱市| 额尔古纳市| 夏津县| 南和县| 岳池县| 佛冈县| 林口县| 张掖市| 铜陵市| 荃湾区| 峨眉山市| 青州市|