需要用到的Python知识点
- Python的对象属性方法;
- 用到字典{key:value}值的提取;
- 列表的增加;
- if循环结合break的使用;
- 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文件多层菜单详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“详解Python读取yaml文件多层菜单”评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
20240901
20240901
- DzintraErliha-Dreamscape(2024)[24Bit-96kHz]FLAC
- 群星.1999-上华世纪国语总冠军4CD【上华】【WAV+CUE】
- 叶丽仪.1992-仙鹤神针电视剧原声音乐专辑【星传真】【WAV+CUE】
- 陈柏宇.2011-QUINQUENNIUM【SONY】【WAV+CUE】
- 《51首热门当红歌曲 十大顶级发烧女声 3CD》[WAV+CUE][1.6GB]
- 《赵传 深受摇滚迷青睐的台湾音乐人 约定》[WAV+CUE][320MB]
- 《庄心妍 实力唱将 发烧音乐精选集》[WAV+CUE][380MB]
- [音展纪念碟]2006年《TAA台湾第十六届国际HI-ENDHI-FI音响展》2cd[WAV]
- 中国音乐地图之听见西藏山歌牧歌酒歌2020[WAV分轨]
- 王宏伟2017-永远的红飘带[太平洋影音][WAV+CUE]
- 费翔.1997-NOW现在【第一中国】【WAV+CUE】
- 新格合唱团.1981-我唱你和2辑(滚石新格民歌系列)【新格】【WAV+CUE】
- 陈柏宇.2011-QUINQUENNIUM【SONY】【WAV+CUE】
- 雨果唱片-《金唛系列-蔷薇依韵琼瑶》WAV
- 陈百强《凝望(2012华纳LPCD45限量版)[DMI]》[WAV整轨]