首頁 >後端開發 >Python教學 >多層選單操作(函數實作)

多層選單操作(函數實作)

巴扎黑
巴扎黑原創
2017-06-23 15:08:492586瀏覽

作業二:多層選單

#(1)三級選單

#(2)可以次選擇進入各子選單

(3)所需新知識點:列表、字典

#需求:輸入back返回上一層,輸入quit退出整個程式

本範例的三級選單是一個yaml檔案格式,格式如下:

#
香港:
  香港
澳门:
  澳门
台湾:
  台湾
钓鱼岛:
  钓鱼岛
北京市:  - 市辖区  - 东城区  - 西城区  - 崇文区  - 宣武区  - 朝阳区
河北省:  - 石家庄市:- 长安区- 桥东区- 桥西区- 新华区  - 唐山市:- 路南区- 路北区- 古冶区- 开平区  - 秦皇岛市:- 海港区- 山海关区
山西省:  - 太原市:- 小店区- 迎泽区- 杏花岭区  - 大同市:- 城 区- 矿 区- 南郊区  - 阳泉市:- 城 区- 矿 区- 郊 区- 平定县- 盂 县  - 长治市:- 城 区- 郊 区- 长治县- 襄垣县- 屯留县

 

    yaml格式的處理方法如下:

    首先,上面的格式是一個多層模式,有一級,二級,三級的情況,使用yaml處理後的字典如下形式:

,) =

    運行得到的字典如下格式:

    {'香港': '香港',

#    '北京市' : ['市轄區', '東城區', '西城區', '崇文區', '宣武區', '朝陽區'],

    '台灣': '台灣',

    '澳門': '澳門',

   '河北省': [{'石家莊市': ['長安區', '橋東區', '橋西區', '新華區']}, {'唐山市': ['路南區', '路北區', '古冶區', '開平區' ]}, {'秦皇島市': ['海港區', '山海關區']}],

#    '釣魚島': '釣魚島',

    '山西省': [{'太原市': ['小店區', '迎澤區', '杏花嶺區']}, {'大同市': ['城區', '礦區', '南郊區']}, {'陽泉市': ['城區', '礦區', '郊區', '平定縣', '盂縣']}, {'長治市': ['城區', '郊區', '長治縣', '襄垣縣', '屯留縣']}]}

    得到的是字典,一級如,"香港" :"香港",值是字串型別;二級如: '北京市': ['市轄區', '東城區', '西城區', '崇文區', '宣武區', '朝陽區'],值是列表形式,裡面嵌套的是字串;最複雜的是三級模式,如:'河北省': [{'石家莊市': ['長安區', '橋東區', '橋西區', '新華區']}, {'唐山市': ['路南區', '路北區', '古冶區', '開平區'] }, {'秦皇島市': ['海港區', '山海關區']}],裡面第二層是列表,列表裡面嵌套的還是字典。

    想法:

   (1)本項目的核心其實是得到省/市/縣這樣的模式,在處理的過程中,我們根據值對應的類型進行判斷,使用那種方式處理比較好;

##    (2 )首先我們遍歷字典的第一層,得到省份,把省份放在一個字典中,這樣,我們就可以根據用戶輸入的值的情況去進行輸出對應的省;

  (3)得到省之後,我們可以得到省下面的鍵值,判斷值對應的類型,根據不同值的類型進行不同方式的操作;

   (4)如果值是字串,表示是一級選單形式,這種方式最好處理;

(5)如果值是列表,且第一個值是字串,表示是北京這種的二級模式,使用二級模式的方法進行展示;

##  (6)如果值是列表,且第一個值是一個字典的形式,說明是三級模式的情形,就要使用三級模式來進行操作;

##    (7)定義全域變量,我們要知道我們需要得到的是什麼,我們要得到省市縣三級模式;只有知道了對應的省市縣,我們只需要去字典中遍歷即可得到值的資訊。

    流程圖如下:

   

代码如下:

 

                     s =                            province_dict =      num,province_name  enumerate(dic_db.keys(),                  province_dict[num] =         print( %(num,province_name) + ,end=                   num %  ==       print(     print(          find_index = input(     find_index =      find_index ==          sys.exit(      find_index          P_NAME =      elif find_index          P_NAME =               print(       P_NAME    #省的函数运行完成之后,返回省的名称,以便后续使用,因为主要是得到省/市/            city_name =      type(city_name) ==              elif type(city_name) ==          type(city_name[]) ==                       elif type(city_name[]) ==                               city_dict =      city_num,city_name  enumerate(city_list,         city_dict[city_num] =         print( %(city_num,city_name) + ,end=          city_num %  ==           print(         print(          city_index = input(         city_index =          city_index ==            city_index ==                       elif city_index              C_NAME =          elif city_index              C_NAME =                                    print(                      city_dict =      c_num,c_name  enumerate(country_list,          key              city_dict[c_num] =      k,v           print( %(k,v) + ,end=          k %  ==       print(     print(              city_num = input(         city_num =          city_num ==            city_num ==                       elif city_num              C_NAME =              key,value                   value ==                     C_INDEX =                            elif city_num              C_NAME =             C_INDEX =                       print(                                   countries = country_list[C_INDEX -               c_index,country  enumerate(countries,                 print( %(c_index,country) + ,end=                  k %  ==               print(             print(             country_index = input(             country_index =              country_index ==                country_index ==                               elif country_index               elif country_index  range(,len(countries)+                 show(province,C_NAME,countries[country_index-                              print(  def framework(province=,city=,country=          os.system(     message =  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                        \[;1m欢迎来到全国省市查询系统\  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  ***************************************************************************                  省  份:%                  市(区):%                  县(区):%  ***************************************************************************          print(message %  def show(province_name=,city_name=,country_name=     output =  ----------------------------------------------------------------------------            美丽的%s  %s  %      ----------------------------------------------------------------------------     \[0m     print(output %   __name__ ==      with open(,)          dic_db =                       ProvinceName =             judge(ProvinceName,dic_db)

代码运行如下:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

                      欢迎来到全国省市查询系统

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

***************************************************************************

                省  份:

                市(区):

                县(区):

***************************************************************************
    
1. 澳门    2. 山西省    3. 北京市    4. 台湾    
5. 钓鱼岛    6. 香港    7. 河北省    
==============================================================
q:Exit
请输入你要查询的省的编号/名字:1

----------------------------------------------------------------------------

          美丽的澳门    

               欢迎您!

               这里山美,水美,姑娘更美

----------------------------------------------------------------------------
    
1. 澳门    2. 山西省    3. 北京市    4. 台湾    
5. 钓鱼岛    6. 香港    7. 河北省    
==============================================================
q:Exit
请输入你要查询的省的编号/名字:2

----------------------------------------------------------------------------

          美丽的山西省    

               欢迎您!

               这里山美,水美,姑娘更美

----------------------------------------------------------------------------
    
1.太原市    2.大同市    3.阳泉市    4.长治市    

===============================================================================
q:Exit       b:退回上一层
请输入您要查询的市的编号/名字:2

----------------------------------------------------------------------------

          美丽的山西省  大同市  

               欢迎您!

               这里山美,水美,姑娘更美

----------------------------------------------------------------------------
    
1.城 区    
2.矿 区    
3.南郊区    

===============================================================================
q:Exit    b:退回上一层
请输入你要查询的县(区)编号/名字:2

----------------------------------------------------------------------------

          美丽的山西省  大同市  矿 区

               欢迎您!

               这里山美,水美,姑娘更美

----------------------------------------------------------------------------
    
1.城 区    
2.矿 区    
3.南郊区    

===============================================================================
q:Exit    b:退回上一层
请输入你要查询的县(区)编号/名字:b
请输入您要查询的市的编号/名字:b
1. 澳门    2. 山西省    3. 北京市    4. 台湾    
5. 钓鱼岛    6. 香港    7. 河北省    
==============================================================
q:Exit
请输入你要查询的省的编号/名字:北京市

----------------------------------------------------------------------------

          美丽的北京市    

               欢迎您!

               这里山美,水美,姑娘更美

----------------------------------------------------------------------------
    
1.市辖区    
==================================================================
q:Exit     b:退回上一层
请输入您要查询的市的编号/名字:1

----------------------------------------------------------------------------

          美丽的北京市  市辖区  

               欢迎您!

               这里山美,水美,姑娘更美

----------------------------------------------------------------------------
    
1. 澳门    2. 山西省    3. 北京市    4. 台湾    
5. 钓鱼岛    6. 香港    7. 河北省    
==============================================================
q:Exit
请输入你要查询的省的编号/名字:7

----------------------------------------------------------------------------

          美丽的河北省    

               欢迎您!

               这里山美,水美,姑娘更美

----------------------------------------------------------------------------
    
1.石家庄市    2.唐山市    3.秦皇岛市    
===============================================================================
q:Exit       b:退回上一层
请输入您要查询的市的编号/名字:石家庄市

----------------------------------------------------------------------------

          美丽的河北省  石家庄市  

               欢迎您!

               这里山美,水美,姑娘更美

----------------------------------------------------------------------------
    
1.长安区    2.桥东区    3.桥西区    4.新华区    
===============================================================================
q:Exit    b:退回上一层
请输入你要查询的县(区)编号/名字:长安区

----------------------------------------------------------------------------

          美丽的河北省  石家庄市  长安区

               欢迎您!

               这里山美,水美,姑娘更美

----------------------------------------------------------------------------
    
1.长安区    2.桥东区    3.桥西区    4.新华区    
===============================================================================
q:Exit    b:退回上一层
请输入你要查询的县(区)编号/名字:q

 

    上面代码,我学到了如下知识:

  (1)yaml格式文件的处理,导入yaml模块,使用yaml.load()进行文件字符串转换为字典形式;

    (2)全局变量的定义,在很多时候,在程序运行的过程中,我们总是需要的到几个重要的变量,使用全局变量,能够让我们更好的理清思路,全局变量使用global来进行定义;

    (3)函数def的结束是遇到return,遇到return无论什么时候,就结束这个函数,因为当我们与while结合使用的时候,可以直接使用return来结束这个循环;

    (4)字典、列表的处理方式;

  (5)enumerate()函数的使用;

  (6)sys.exit()来退出整个程序,sys模块;

    (7)不怕麻烦,牢牢知道自己需要的是什么自己的目的是什么。

 

以上是多層選單操作(函數實作)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn