最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Python讀取yaml文件多層菜單

 更新時(shí)間:2019年03月23日 15:04:58   作者:一個(gè)測(cè)試的夢(mèng)想  
這篇文章主要介紹了Python讀取yaml文件多層菜單,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

需要用到的Python知識(shí)點(diǎn)

  1. Python的對(duì)象屬性方法;
  2. 用到字典{key:value}值的提取;
  3. 列表的增加;
  4. if循環(huán)結(jié)合break的使用;
  5. yaml文件讀取;

代碼如下:

#!/usr/bin/python34
import sys,os,re,yaml,time
#reload(sys)
#sys.setdefaultencoding('utf-8') 

######################對(duì)input輸入字符類型判斷并轉(zhuǎn)化#####################
def input_handle(s):
 if str.isdigit(s):     ###對(duì)輸入是否是數(shù)字進(jìn)行判斷
  s = int(s)      ###如果輸出的是個(gè)數(shù)字,則轉(zhuǎn)化為整數(shù)類型
 return s
 
 # try:
 #  eval(s)       ###eval將字符串str當(dāng)成有效的表達(dá)式來求值并返回計(jì)算結(jié)果
 # except NameError:     ###名稱錯(cuò)誤
 #  return s
 # except SyntaxError:     ###語法錯(cuò)誤
 #  return s
 # else:
 #  return eval(s)
 

####################框架函數(shù)######################
def framework(province='',city='',county=''):
 os.system('cls')        ###清屏###
 print('''
******************************************************************
*                *
*      歡迎訪問全國(guó)省市查詢系統(tǒng)     *
*                *
******************************************************************


+-----------------------------------------------------------------
|   省份: %s 
|
|   市(區(qū)): %s 
|
|   縣(區(qū)): %s
+-----------------------------------------------------------------
''' % (province,city,county))
 
######################輸出展示函數(shù)#################
def show(province_name='',city_name='',county_name=''):
 output= '''
******************************************************************
*                *
     美麗的%s %s %s
*       歡迎您        *
     這里的山美,水美,妹子更美      
*                *
****************************************************************** 
'''
 print(output % (province_name,city_name,county_name))


###################菜單第一層省份或直轄市輸出函數(shù)#################
def province_show(province_list):
 
 ############申明全局變量####################
 global P_NAME
 global C_NAME
 global X_NAME
 global FLAG_M

 province_dict = {}   
 ############對(duì)省份或直轄市列表參數(shù)進(jìn)行遍歷并加上數(shù)字編號(hào)############### 
 for k,v in enumerate(province_list,1):
   province_dict[k] = v
   print('%d . %s' % (k,v) + '\t',end='')  ###加上end參數(shù),取消默認(rèn)換行###
   if k % 4 == 0:        ###按4列換行###
    print()
 print('\n================================================================')
 print('q : Exit')

 ###############鍵盤讀入編號(hào)或省份,可以輸入漢字#################
 province_index = input('請(qǐng)輸入編號(hào)或省份 : ')

 ###############如果輸入非空,對(duì)輸入進(jìn)行判斷并轉(zhuǎn)化類型###########
 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():   ###如果輸入為數(shù)字編號(hào),則從字典中獲取具體省份或直轄市名稱###
  P_NAME = province_dict[province_index]   ###對(duì)全局變量賦值省份名稱###
 elif province_index in province_dict.values():  ###如果輸入為具體省份,則從字典中獲取具體省份或直轄市名稱###
  P_NAME = province_index       ###對(duì)全局變量賦值省份名稱###
 else:
  P_NAME = ''          ###輸入其他字符,賦值全局變量為空### 

 while P_NAME:          ###全局變量不為空進(jìn)行循環(huán)###
  framework(P_NAME,C_NAME,X_NAME)     ###調(diào)用框架###
  if type(yaml_dict[P_NAME]) is list:
   city_show(P_NAME)       ###調(diào)用城市函數(shù),并傳入省份值###
   if FLAG_M == 'b':       ###城市函數(shù)輸入b,返回上一層,重新選擇省份###
    break
  else:
   show(P_NAME)         ###調(diào)用輸出展示函數(shù)### 
   time.sleep(5)
   P_NAME = ''
   break
 else:
  print('輸入錯(cuò)誤,請(qǐng)重新輸入!')     ###P_NAME為空,即輸入錯(cuò)誤,重新輸入###
  time.sleep(2)
 
##############菜單第二層城市輸出函數(shù)#######################
def city_show(province_name):

 ############申明全局變量###############
 global P_NAME
 global C_NAME
 global X_NAME
 global FLAG_M
 
 city_name = ''          ###定義城市變量默認(rèn)為空###
 city_list = yaml_dict[province_name]     ###定義賦值城市列表###
 city_dict = {}          ###定義城市編號(hào)和名稱字典###
 city_county_dict = {}        ###定義地級(jí)市和下屬區(qū)縣字典###

 ############對(duì)城市列表參數(shù)進(jìn)行遍歷并加上數(shù)字編號(hào)############### 
 for k,v in enumerate(city_list,1):
  if type(v) is str:        ###直轄市只有二層菜單,第二層為直接的各區(qū)或縣,值類型為具體字符###
   city_dict[k] = v        ###對(duì)直轄市下的區(qū)或縣進(jìn)行新字典賦值,方便查詢和展示###
   print('%d . %s' % (k,v) + '\t',end='')  ###末尾加',',取消默認(rèn)換行###
  elif type(v) is dict:       ###其他省份有三層菜單,第二層為各地級(jí)市,值類型字典###
   for kk,vv in v.items():      ###對(duì)地級(jí)市的字典進(jìn)行遍歷###
    city_dict[k] = kk      ###對(duì)其他省份下的地級(jí)市進(jìn)行新字典賦值,方便查詢和展示### 
    city_county_dict[kk] = vv    ###對(duì)二層地級(jí)市和三層縣市重新賦值新字典###    
    print('%d . %s' % (k,kk) + '\t',end='') ###加上end參數(shù),取消默認(rèn)換行### 
  else:
   pass
    
  if k % 4 == 0:         ###按4列換行###
   print()
 print('\n================================================================')
 print('q : Exit b : Back')

 ###############鍵盤讀入編號(hào)或區(qū)市,可以輸入漢字#################
 city_index = input('請(qǐng)輸入編號(hào)或區(qū)市 : ')
 
 ###############如果輸入非空,對(duì)輸入進(jìn)行判斷并轉(zhuǎn)化類型###########
 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設(shè)置為空,F(xiàn)LAG_M設(shè)置為b,則返回上一層###
  return           ###直接返回,不進(jìn)行函數(shù)以下的操作###
 elif city_index in city_dict.keys():     ###如果輸入為數(shù)字編號(hào),則從字典中獲取具體城市名稱###
  city_name = city_dict[city_index]    ###賦值地級(jí)市的名稱,并對(duì)全局變量進(jìn)行賦值###
  (P_NAME,C_NAME,FLAG_M) = (province_name,city_name,'')
 elif city_index in city_dict.values():    ###如果輸入為城市名稱,則從字典中獲取具體省份名稱###
  city_name = city_index       ###賦值地級(jí)市的名稱,并對(duì)全局變量進(jìn)行賦值###
  (P_NAME,C_NAME,FLAG_M) = (province_name,city_name,'')
 else:
  pass            ###如果輸入其他字符,則不做任何操作###
 
 if city_name:          ###如果地級(jí)市名字不為空,即鍵盤輸入為要求字符###
  if city_name in city_county_dict.keys():   ###判斷是省份的地級(jí)市名字### 
   while C_NAME:        ###環(huán)境變量C_NAME不為空###
    framework(P_NAME,C_NAME,X_NAME)   ###調(diào)用框架函數(shù),并將省份名字和地級(jí)市名字傳入###

    ###調(diào)用三層區(qū)縣顯示函數(shù),并傳入具體變量###
    county_show(P_NAME,C_NAME,city_county_dict[city_name]) 
    if FLAG_N == 'b':      ###三層區(qū)縣函數(shù)輸入b,返回上一層,重新選擇地級(jí)市###
     break
   else:
    print('輸入錯(cuò)誤,請(qǐng)重新輸入!')   ###C_NAME為空,即輸入錯(cuò)誤,重新輸入###
    time.sleep(2)
  else:           ###判斷是直轄市的區(qū)或縣名字###
   show(P_NAME,C_NAME)       ###調(diào)用輸出展示函數(shù)### 
   time.sleep(5)
 else:            ###輸入非要求字符,提示重新輸入###
  print('輸入錯(cuò)誤,請(qǐng)重新輸入!')
  time.sleep(2)
  
##############菜單第三層區(qū)縣輸出函數(shù)#######################
def county_show(province_name,city_name,county_list):

 ############申明全局變量####################
 global P_NAME
 global C_NAME
 global X_NAME
 global FLAG_N

 county_name = ''          ###定義三級(jí)區(qū)縣變量默認(rèn)為空###
 county_dict = {}          ##定義賦值區(qū)縣字典###
 
 ############對(duì)區(qū)縣列表參數(shù)進(jìn)行遍歷并加上數(shù)字編號(hào)############### 
 for k,v in enumerate(county_list,1):     
  if type(v) is str:        ###第三層為直接的各區(qū)或縣,值類型為具體字符str###
   county_dict[k] = v       ###對(duì)區(qū)或縣進(jìn)行新字典賦值,方便查詢和展示###
   print('%d . %s' % (k,v) + '\t',end='')  ###加上end參數(shù),取消默認(rèn)換行### 

  if k % 4 == 0:         ###按4列換行###
   print()
 print('\n================================================================')
 print('q : Exit b : Back')

 ###############鍵盤讀入編號(hào)或區(qū)縣,可以輸入漢字#################
 county_index = input('請(qǐng)輸入編號(hào)或區(qū)縣 : ')

 ###############如果輸入非空,對(duì)輸入進(jìn)行判斷并轉(zhuǎn)化類型###########
 if len(county_index) != 0:       
  county_index = input_handle(county_index)

 if county_index == 'q':        ###如果輸入為q,則退出程序###
  sys.exit(0)
 elif county_index == 'b':       ###如果輸入為b,則返回上一層,重新選擇第二層地級(jí)市###
  (P_NAME,C_NAME,X_NAME,FLAG_N) = (province_name,'','','b') ###全局變量C_NAME設(shè)置為空,F(xiàn)LAG_M設(shè)置為b,則返回上一層###
  return           ###直接返回,不進(jìn)行函數(shù)以下的操作### 
 elif county_index in county_dict.keys():    ###如果輸入為數(shù)字編號(hào),則從字典中獲取具體區(qū)縣名稱###
  county_name = county_dict[county_index]   ###賦值區(qū)縣的名稱,并對(duì)全局變量進(jìn)行賦值###
  (P_NAME,C_NAME,X_NAME,FLAG_N) = (province_name,city_name,county_name,'')
 elif county_index in county_dict.values():   ###如果輸入為區(qū)縣名稱,則從字典中獲取具體區(qū)縣名稱###
  county_name = county_index      ###賦值區(qū)縣的名稱,并對(duì)全局變量進(jìn)行賦值###
  (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:          ###如果區(qū)縣名字不為空,即鍵盤輸入為要求字符###
  show(P_NAME,C_NAME,X_NAME)      ###調(diào)用輸出展示函數(shù)### 
  time.sleep(5)
 else:
  print('輸入錯(cuò)誤,請(qǐng)重新輸入!')     ###輸入非要求字符,提示重新輸入###
  time.sleep(2)
 


##########################################主程序###############################

###############讀取yaml格式文件#######################
fd = open(r'G:\sicps\test\pro',encoding='utf-8')
yaml_dict = yaml.load(fd)

###############定義全局變量###########################
P_NAME = ''            ###省份或直轄市全局變量###
C_NAME = ''            ###各省地級(jí)市或直轄市區(qū)縣的全局變量###
X_NAME = ''            ###各省地級(jí)市下的區(qū)或縣 全局變量###
FLAG_M = ''            ###退出菜單第二層,返回上一層循環(huán)的變量###
FLAG_N = ''            ###退出菜單第三層,返回上一層循環(huán)的變量###

###############獲取省份或直轄市的列表#################
prov_list = yaml_dict.keys()

###############主循環(huán)開始#############################
while True:
 framework(P_NAME,C_NAME,X_NAME)      ###調(diào)用框架函數(shù),顯示初始狀態(tài)###
 province_show(prov_list)       ###調(diào)用第一層省份或直轄市輸出函數(shù)###

以上所述是小編給大家介紹的Python讀取yaml文件多層菜單詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 詳解Python?Requests庫中的重試策略

    詳解Python?Requests庫中的重試策略

    在Python中,requests庫是處理HTTP請(qǐng)求的標(biāo)準(zhǔn)工具之一,這篇文章主要為大家介紹了如何在requests中實(shí)現(xiàn)請(qǐng)求的自動(dòng)重試,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • python繪制子圖技巧之plt.subplot、plt.subplots及坐標(biāo)軸修改

    python繪制子圖技巧之plt.subplot、plt.subplots及坐標(biāo)軸修改

    一個(gè)圖片里邊繪制多個(gè)圖像是繪圖中的常見需求,下面這篇文章主要給大家介紹了關(guān)于python繪制子圖技巧之plt.subplot、plt.subplots及坐標(biāo)軸修改的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • Python3進(jìn)制之間的轉(zhuǎn)換代碼實(shí)例

    Python3進(jìn)制之間的轉(zhuǎn)換代碼實(shí)例

    這篇文章主要介紹了Python3進(jìn)制之間的轉(zhuǎn)換代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Tensorflow 實(shí)現(xiàn)分批量讀取數(shù)據(jù)

    Tensorflow 實(shí)現(xiàn)分批量讀取數(shù)據(jù)

    今天小編就為大家分享一篇Tensorflow 實(shí)現(xiàn)分批量讀取數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python中l(wèi)ogging庫的使用總結(jié)

    python中l(wèi)ogging庫的使用總結(jié)

    Python的logging模塊提供了通用的日志系統(tǒng),可以方便第三方模塊或者是應(yīng)用使用,下面這篇文章主要給大家介紹了關(guān)于python中l(wèi)ogging庫使用的一些知識(shí)總結(jié),文中給出了詳細(xì)的示例代碼,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-10-10
  • 淺談numpy 函數(shù)里面的axis參數(shù)的含義

    淺談numpy 函數(shù)里面的axis參數(shù)的含義

    這篇文章主要介紹了numpy 函數(shù)里面的axis參數(shù)的含義,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • Python圖像處理庫PIL的ImageEnhance模塊使用介紹

    Python圖像處理庫PIL的ImageEnhance模塊使用介紹

    這篇文章主要介紹了Python圖像處理庫PIL的ImageEnhance模塊使用介紹,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • python實(shí)現(xiàn)幾種歸一化方法(Normalization Method)

    python實(shí)現(xiàn)幾種歸一化方法(Normalization Method)

    這篇文章主要介紹了python實(shí)現(xiàn)幾種歸一化方法(Normalization Method),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • python生成xml時(shí)規(guī)定dtd實(shí)例方法

    python生成xml時(shí)規(guī)定dtd實(shí)例方法

    在本篇文章里小編給大家整理的是關(guān)于python生成xml時(shí)規(guī)定dtd實(shí)例方法,需要的朋友們學(xué)習(xí)參考下。
    2020-09-09
  • Python簡(jiǎn)易圖形界面庫easygui對(duì)話框整理大全

    Python簡(jiǎn)易圖形界面庫easygui對(duì)話框整理大全

    這篇文章主要給大家介紹了關(guān)于Python簡(jiǎn)易圖形界面庫easygui對(duì)話框的相關(guān)資料,EasyGUI是一個(gè)用Python編寫的非常簡(jiǎn)易的GUI編程模塊,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01

最新評(píng)論

深水埗区| 理塘县| 民勤县| 分宜县| 仪陇县| 饶平县| 邯郸市| 乡城县| 山东省| 彭山县| 安新县| 会泽县| 胶州市| 新郑市| 建水县| 大安市| 南投市| 分宜县| 汉川市| 涟水县| 巴东县| 常山县| 高密市| 普安县| 巨鹿县| 邵武市| 宜君县| 永宁县| 无极县| 黎川县| 安陆市| 依安县| 来安县| 靖江市| 岳阳市| 泰来县| 巫溪县| 米林县| 临沧市| 广灵县| 墨脱县|