Maison > Article > développement back-end > Fonctionnement du menu à plusieurs niveaux (implémentation de la fonction)
Devoir 2 : Menu à plusieurs niveaux
(1) Menu à trois niveaux
(2) Vous pouvez choisir d'entrer dans chaque sous-menu
(3) Nouveaux points de connaissances requis : liste, dictionnaire
Conditions requises : Entrez back pour revenir au niveau précédent, entrez quit pour quitter l'ensemble du programme
Le menu de troisième niveau dans cet exemple est un format de fichier yaml, le format est comme suit :
香港: 香港 澳门: 澳门 台湾: 台湾 钓鱼岛: 钓鱼岛 北京市: - 市辖区 - 东城区 - 西城区 - 崇文区 - 宣武区 - 朝阳区 河北省: - 石家庄市:- 长安区- 桥东区- 桥西区- 新华区 - 唐山市:- 路南区- 路北区- 古冶区- 开平区 - 秦皇岛市:- 海港区- 山海关区 山西省: - 太原市:- 小店区- 迎泽区- 杏花岭区 - 大同市:- 城 区- 矿 区- 南郊区 - 阳泉市:- 城 区- 矿 区- 郊 区- 平定县- 盂 县 - 长治市:- 城 区- 郊 区- 长治县- 襄垣县- 屯留县
La méthode de traitement du format yaml est la suivante :
Tout d'abord, le format ci-dessus est un En mode multi-niveaux, il existe un premier niveau, un deuxième niveau et un troisième niveau. Le dictionnaire traité à l'aide de yaml se présente sous la forme suivante :
,) =
Le dictionnaire obtenu en courant est au format suivant :
{'Hong Kong' : 'Hong Kong',
'Pékin' : ['District administré par la ville', 'District de Dongcheng', 'District de Xicheng', 'District de Chongwen', 'District de Xuanwu', 'District de Chaoyang'],
'Taïwan' : 'Taïwan',
'Macao' : 'Macao',
'Province du Hebei' : [{' Ville de Shijiazhuang' : ['District de Chang'an', 'District de Qiaodong', 'District de Qiaoxi', 'District de Xinhua']}, {'Ville de Tangshan' : ['District de Lunan', 'District de Lubei', 'District de Guye' , 'District de Kaiping' ]}, {'Ville de Qinhuangdao' : ['District de Haigang', 'District de Shanhaiguan']}],
'Île Diaoyu' : 'Île Diaoyu',
'Province du Shanxi' : [{'Ville de Taiyuan' : ['District de Xiaodian', 'District de Yingze', 'District de Xinghualing']}, {'Ville de Datong' : [' District municipal', 'Zone minière', 'Banlieue sud']}, {'Ville de Yangquan' : ['Zone urbaine', 'Zone minière', 'Zone suburbaine', 'Comté de Pingding', 'Comté de Yu']}, {'Ville de Changzhi' : ['Zone urbaine', 'Zone suburbaine', 'Comté de Changzhi', 'Comté de Xiangyuan', 'Comté de Tunliu']}]}
Ce que vous obtenez est un dictionnaire, le premier niveau est comme "Hong Kong" : "Hong Kong", la valeur est un type de chaîne ; le deuxième niveau est : 'Beijing City' : ['Municipal District', 'Dongcheng District' , 'Xicheng District', 'Chongwen District', 'Xuanwu District', 'Chaoyang District'], la valeur est sous forme de liste, avec des chaînes imbriquées à l'intérieur, le plus complexe est le mode à trois niveaux, tel que : 'Province du Hebei' : [{'Ville de Shijiazhuang' : ['District de Chang'an', 'District de Qiaodong', 'District de Qiaoxi', 'District de Xinhua']}, {'Ville de Tangshan' : ['District de Lunan' ', 'District de Lubei', 'District de Guye', 'District de Kaiping'] }, {'Ville de Qinhuangdao' : ['District de Haigang', 'District de Shanhaiguan']}], le deuxième niveau à l'intérieur est une liste et le dictionnaire est imbriqué dans la liste.
Idées :
(1) Le cœur de ce projet est en fait de sauver / Pour les modèles comme ville/comté, lors du traitement, nous jugeons en fonction du type correspondant à la valeur, quelle méthode est préférable d'utiliser
(2 ; ) Tout d'abord, nous parcourons le premier niveau du dictionnaire, récupérons les provinces et mettons les provinces dans un dictionnaire. De cette façon, nous pouvons afficher les provinces correspondantes en fonction des valeurs saisies par l'utilisateur
(3) Après avoir obtenu la province, nous pouvons obtenir la valeur clé sous la province, juger le type correspondant à la valeur et effectuer différentes opérations selon le type de la valeur ;
(4) Si la valeur est une chaîne, cela signifie qu'il s'agit d'un menu de premier niveau, ce qui est la meilleure façon de la gérer
(5) Si la valeur est une liste et que la première valeur est une chaîne, cela signifie qu'il s'agit d'un mode secondaire comme Pékin, et elle est affichée en utilisant le méthode en mode secondaire ;
(6) Si la valeur est une liste et que la première valeur est sous la forme d'un dictionnaire, cela indique qu'il s'agit d'un mode à trois niveaux, et le mode à trois niveaux doit être utilisé pour fonctionner
(7) Pour définir des variables globales, nous devons savoir ce dont nous avons besoin pour obtenir, et nous devons obtenir le modèle à trois niveaux des provinces, des villes et des comtés ; seulement lorsque nous connaissons les provinces, les villes et les comtés correspondants, il suffit d'aller au dictionnaire. Vous pouvez obtenir les informations sur la valeur en le parcourant.
L'organigramme est le suivant : 代码如下: 上面代码,我学到了如下知识: (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
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!