作業二:多層選單
#(1)三級選單
#(2)可以次選擇進入各子選單
(3)所需新知識點:列表、字典
#需求:輸入back返回上一層,輸入quit退出整個程式
本範例的三級選單是一個yaml檔案格式,格式如下:
香港: 香港 澳门: 澳门 台湾: 台湾 钓鱼岛: 钓鱼岛 北京市: - 市辖区 - 东城区 - 西城区 - 崇文区 - 宣武区 - 朝阳区 河北省: - 石家庄市:- 长安区- 桥东区- 桥西区- 新华区 - 唐山市:- 路南区- 路北区- 古冶区- 开平区 - 秦皇岛市:- 海港区- 山海关区 山西省: - 太原市:- 小店区- 迎泽区- 杏花岭区 - 大同市:- 城 区- 矿 区- 南郊区 - 阳泉市:- 城 区- 矿 区- 郊 区- 平定县- 盂 县 - 长治市:- 城 区- 郊 区- 长治县- 襄垣县- 屯留县
yaml格式的處理方法如下:
首先,上面的格式是一個多層模式,有一級,二級,三級的情況,使用yaml處理後的字典如下形式:
,) =
運行得到的字典如下格式:
{'香港': '香港',
# '北京市' : ['市轄區', '東城區', '西城區', '崇文區', '宣武區', '朝陽區'],
'台灣': '台灣',
'澳門': '澳門',
'河北省': [{'石家莊市': ['長安區', '橋東區', '橋西區', '新華區']}, {'唐山市': ['路南區', '路北區', '古冶區', '開平區' ]}, {'秦皇島市': ['海港區', '山海關區']}],
# '釣魚島': '釣魚島',
'山西省': [{'太原市': ['小店區', '迎澤區', '杏花嶺區']}, {'大同市': ['城區', '礦區', '南郊區']}, {'陽泉市': ['城區', '礦區', '郊區', '平定縣', '盂縣']}, {'長治市': ['城區', '郊區', '長治縣', '襄垣縣', '屯留縣']}]}
得到的是字典,一級如,"香港" :"香港",值是字串型別;二級如: '北京市': ['市轄區', '東城區', '西城區', '崇文區', '宣武區', '朝陽區'],值是列表形式,裡面嵌套的是字串;最複雜的是三級模式,如:'河北省': [{'石家莊市': ['長安區', '橋東區', '橋西區', '新華區']}, {'唐山市': ['路南區', '路北區', '古冶區', '開平區'] }, {'秦皇島市': ['海港區', '山海關區']}],裡面第二層是列表,列表裡面嵌套的還是字典。
想法:
(1)本項目的核心其實是得到省/市/縣這樣的模式,在處理的過程中,我們根據值對應的類型進行判斷,使用那種方式處理比較好;
## (2 )首先我們遍歷字典的第一層,得到省份,把省份放在一個字典中,這樣,我們就可以根據用戶輸入的值的情況去進行輸出對應的省;
(3)得到省之後,我們可以得到省下面的鍵值,判斷值對應的類型,根據不同值的類型進行不同方式的操作;
(4)如果值是字串,表示是一級選單形式,這種方式最好處理;
(5)如果值是列表,且第一個值是字串,表示是北京這種的二級模式,使用二級模式的方法進行展示;
## (6)如果值是列表,且第一個值是一個字典的形式,說明是三級模式的情形,就要使用三級模式來進行操作;
## (7)定義全域變量,我們要知道我們需要得到的是什麼,我們要得到省市縣三級模式;只有知道了對應的省市縣,我們只需要去字典中遍歷即可得到值的資訊。流程圖如下:
代码如下: 上面代码,我学到了如下知识: (1)yaml格式文件的处理,导入yaml模块,使用yaml.load()进行文件字符串转换为字典形式; (2)全局变量的定义,在很多时候,在程序运行的过程中,我们总是需要的到几个重要的变量,使用全局变量,能够让我们更好的理清思路,全局变量使用global来进行定义; (3)函数def的结束是遇到return,遇到return无论什么时候,就结束这个函数,因为当我们与while结合使用的时候,可以直接使用return来结束这个循环; (4)字典、列表的处理方式; (5)enumerate()函数的使用; (6)sys.exit()来退出整个程序,sys模块; (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
以上是多層選單操作(函數實作)的詳細內容。更多資訊請關注PHP中文網其他相關文章!