python开发基础作业02:三级菜单,使用字典dic及列表
作业要求及提示:三级菜单
'''
1.三级菜单
2.可依次进入各子菜单
3.菜单能够回到上一级
4.用到知识点:字典、列表、多层循环、函数
条件:基本 if else
嵌套 if...if...if...else
if elif else
循环:while 条件:
.....
else:
...
continue 终止当前循环,开始下一次循环
break 终止所有循环(跳出所在while或for...)
下述示例,部分判断中的break可变更为continue,并删除部分非必要for循环。
'''
流程图
代码示例1:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Author : "David J"# 使用字典保存省份、市、县列表
# 这是一个多级的字典,可以通过for查询每一个级别的信息,级别:省份、市、区_country_dict = {'1.河南省': {'1.郑州市': {'1.金水区': ['区号100', '邮编400000'], '2.中原区': ['区号101', '邮编400001'], '3.二七区': ['区号102', '邮编400002']},'2.洛阳市': {'1.老城区': ['区号200', '邮编200000'], '2.洛龙区': ['区号201', '邮编200001'], '3.西工区': ['区号203', '邮编200002']},'3.信阳市': {'1.浉河区': ['区号300', '邮编300000'], '2.平桥区': ['区号301', '邮编300001'], '3.固始区': ['区号203', '邮编200002']}},'2.河北省': {'1.石家庄市': {'1.长安区': ['区号400', '邮编500000'], '2.新华区': ['区号401', '邮编500001'], '3.桥西区': ['区号402', '邮编500002']},'2.保定市': {'1.竞秀区': ['区号500', '邮编600000'], '2.莲池区': ['区号501', '邮编600001'], '3.满城区': ['区号503', '邮编600002']},'3.邯郸市': {'1.丛台区': ['区号600', '邮编700000'], '2.邯山区': ['区号601', '邮编700001'], '3.复兴区': ['区号602', '邮编700002']}},'3.湖南省': {'1.长沙市': {'1.芙蓉区': ['区号700', '邮编800000'], '2.岳麓区': ['区号701', '邮编800001'], '3.雨花区': ['区号702', '邮编800002']},'2.常德市': {'1.武陵区': ['区号800', '邮编900000'], '2.鼎城区': ['区号801', '邮编900001'], '3.未知区': ['区号803', '邮编900002']},'3.湘潭市': {'1.丛台区': ['区号900', '邮编110000'], '2.邯山区': ['区号901', '邮编110001'], '3.复兴区': ['区号902', '邮编110002']}},'4.湖北省': {'1.武汉市': {'1.江岸区': ['区号110', '邮编810000'], '2.江汉区': ['区号111', '邮编810001'], '3.汉阳区': ['区号112', '邮编810002']},'2.宜昌市': {'1.西陵区': ['区号120', '邮编910000'], '2.点军区': ['区号121', '邮编910001'], '3.夷陵区': ['区号123', '邮编910002']},'3.孝感市': {'1.孝南区': ['区号130', '邮编120000'], '2.孝感区': ['区号131', '邮编120001'], '3.未知区': ['区号132', '邮编120002']}}
}# 定义一个函数,用于将查询到的省份信息传递给此函数def district():while True:# 定义一个空列表,用于保存城市信息cy = []city_dict = {}# %s是处理对象的一种方法,是占位符,它的值来源于后面的% province省份的值,然后通过print打印出来# province的值是在查询身份的语句里面定义的print('%s 有以下城市:' % province)# 通过for循环将用户选择的省份下面的城市列表放到_city中for _city in sorted(_country_dict[province].keys()):# 打印用户选择的省份下面的城市的列表print(_city)# 将用户选择的省份下面的城市列表附加保存到cy列表中city_num=_city[:1]city_dict[city_num]={"sort_num":city_num,"city_name":_city}cy.append(_city)# print(cy)# 提供交互式界面,让用户输入要查询的城市编号_city_number = input('请输入要查询的城市编号:(后退:b 退出:q)')# 打印城市和区县列表的分隔符print('---------------------------------------------------')# 如果用户输入的编号是q,则退出查询if _city_number == 'q':print('已退出查询!')exit()# 如果用户输入的是b,则中断当前的判断,退回到上一级省份目录elif _city_number == 'b':breakelse:# 如果用户输入的是正确的编号,则从cy城市列表或字典中获取到城市信息,放到city中# 开始一个新的循环,便于b返回for city in _country_dict[province].keys():# 判断用户输入的城市编号和cy列表中的城市编号是否匹配if _city_number in city_dict.keys():# 如果匹配,则将当前城市的名称保存到_citynumber变量中_citynumber = city_dict[_city_number]['city_name']# %s是处理对象的一种方法,是占位符,它的值来源于% _citynumber具体城市的值,然后通过print打印出来print('%s 该城市有下列区县:' % _citynumber)# 通过while循环,将具体城市下面的区县信息查出来while True:# 用于保存区县信息的列表n = []dist_dict = {}# 通过for循环将用户选择的城市下面的区县列表放到_districts中for _districts in sorted(_country_dict[province][_citynumber].keys()):# 打印区县的名称信息,例如二七区print(_districts)dist_num=_districts[:1]dist_dict[dist_num]={"sort_num":dist_num,"dist_name":_districts}# 将区县信息保存到n列表中n.append(_districts)# 提供交互式界面,让用户输入区县的查询行为_phone_number = input('请输入要查询的区县的编号:(后退:b 退出:q)')# # 打印区县和区县具体信息列表的分隔符print('---------------------------------------------------')# 如果用户输入了q,则结束查询if _phone_number == 'q':print('已结束查询!')exit()# 如果用户输入了b,则返回到上一级查询elif _phone_number == 'b':break # 跳出当前循环,回到上一级循环else:# 通过循环遍历从区县列表n中读取区县信息到pn中for pn in _country_dict[province][_citynumber].keys():# 如果用户输入的区县编号和pn中的区县编号匹配if _phone_number in dist_dict.keys():# 则将具体匹配到的区县的名称保存到phone_number中phone_number = dist_dict[_phone_number]['dist_name']# %s的值来源于% _phone_number具体区县的值,然后通过print打印出来print('%s 的信息如下:' % phone_number)# 通过for循环将用户选择的具体的区县的列表中的信息放到p中for p in _country_dict[province][_citynumber][phone_number]:# 打印具体区县下面的邮政编码和区号信息print(p)# 打印查询分隔符print('---------------------------------------------------')# 通过交互式界面询问用户,是否继续查询_end_get = input('查询已完成,是否继续其他查询?(继续:Y 其他:结束)')# 如果用户输入的是大写的Y,则返回到上一级继续查询if _end_get == 'Y':break# 如果用户输入除了大写Y以外其他的值,则结束查询else:print('已结束查询!')exit()# 如果用户输入的区县编号有误,提示用户重新输入else:print('区县编号输入错误,请重新输入')# 第三个while True循环的退出break# 如果用户输入的城市编号不对,则提示用户重新输入else:print('城市编号输入有误,请重新输入!')# 第二个while True不设置中断条件,用户可以退回到当前的城市查询列表中while True:# 初始化空列表,用于保存省份信息c = []
# country_list=[]country_dict={}# 从国家字典中取第一级列表每一行的值,循环放到_country中for _country in sorted(_country_dict.keys()):# 逐行输出国家字典里第一级列表每一行的值print (_country)'''打印效果1.河南省2.河北省3.湖南省4.湖北省'''# 将取到的第一级列表每一行的值追加放入c列表中# country_list=_country.split('.')# country_num=country_list[0].strip()# print(country_list,country_num)#或取_country第一个字符country_num=_country[:1]# print(country_num)# 拆分_country_dict.key()的序号,将序号1234和原key写入新的字典country_dict,用于判断输入是否为省份编号country_dict[country_num]={"sort_num":country_num,"country_name":_country}# print(country_dict.keys())c.append(_country)
# print(c)# print(c) # c列表打印的结果['1.河南省', '2.河北省', '3.湖南省', '4.湖北省']# 提供交互式界面给用户输入省份编号信息country_number = input("请输入要查询的省份编号:(退出:q)")# 打印省份和城市分割线print('---------------------------------------------------')# 如果用户输入的是q,则退出查询if country_number == 'q':print('已退出查询!')break# 如果没有输入q,则有两种情况:1)查询到身份列表,则把省份信息传递给district()函数做进一步查询;2)提示用户输入的编号有错误else:# 遍历c列表中的省份信息,保存到country中for country in _country_dict.keys():if country_number in country_dict.keys():# 将遍历到的C列表的省份信息同用户输入的省份编号进行对比# 如果输入的编号和省份编号一致,则把country的值赋予给province,从而方便进一步查询特定省份下面的城市列表# province = countryprovince = country_dict[country_number]['country_name']# 如果符合上面的条件,则开始执行函数,此函数的目的是在现有查询的基础上进一步查询城市和区县信息district()# print(country_number) # 测试用户交互式输入信息breakelse:print("您输入的省份编号有误,请重新输入!")
转载于:https://www.cnblogs.com/DaweiJ/p/8463427.html
python开发基础作业02:三级菜单,使用字典dic及列表相关推荐
- python开发基础戴歆第四章_第一阶段:Python开发基础 day04 课后练习
第一阶段:Python开发基础 day04 课后作业 1.简述python的五大数据类型的作用.定义方式.使用方法 数字类型 字符串类型 列表 字典 布尔型 答:数字类型分为整型(int)和浮点型(f ...
- 第一天作业二 三级菜单的实现
第一天作业二 三级菜单的实现 这个作业花了一定的时间,主要是卡在循环时显示不同的问题. #!/usr/bin/env python # -*-conding:utf-8-** # __Author__ ...
- c语言 dict数据类型,Python开发基础之Python常用的数据类型
Python开发基础之Python常用的数据类型 发布时间:2020-08-02 20:07:19 来源:51CTO 阅读:348 作者:warrent 博文大纲 一.Python介绍 二.Pytho ...
- 慕课python作业_大学慕课Python编程基础作业答案
大学慕课Python编程基础作业答案 更多相关问题 A.EnglishnessB.BritishnessC.ScottishnessD.Welshness A.beforeB.followedC.fo ...
- python编写登录接口与三级菜单小程序
一:登录接口 编写思路 python登录接口登录三次失败锁定: 一:建一个数据库文件保存用户名和密码,用来判断用户是否存在 二:用户锁定文件,当用户登录三次错误后记录用户信息进入锁定文件,下次登录时就 ...
- dockerfile拉取私库镜像_还在用Alpine作为你Docker的Python开发基础镜像?其实Ubuntu更好一点...
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_173 一般情况下,当你想为你的Python开发环境选择一个基础镜像时,大多数人都会选择Alpine,为什么?因为它太小了,仅仅只有 ...
- python开发基础之数据类型、字符编码、文件操作
一.知识点 1.身份运算: 2.现在计算机系统通用的字符编码工作方式:在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码.用记事本编辑的时候,从文件 ...
- python开发基础04-函数、递归、匿名函数、高阶函数、装饰器
匿名函数 lamba lambda x,y,z=1:x+y+z 匿名就是没有名字 def func(x,y,z=1):return x+y+z匿名 lambda x,y,z=1:x+y+z #与函数有 ...
- 【python入门篇——12】三级菜单详解
需求: 1.运行程序输出第一级菜单 2.选择一级菜单某项,输出二级菜单,同理输出三级菜单 3.输入出错重新选择 4.进入每一层支持返回上一级和退出 5.进入最后一层提醒 实现方法一: # __auth ...
最新文章
- Oracle exp/imp,备份或导入时注意的事项
- 卷进大厂系列之LeetCode刷题笔记:二分查找(简单)
- oh-my-zsh中如何去掉命令提示符前缀
- ROJECT SERVER如何与OUTLOOK集成使用
- NLP工具包(Albert+BiLSTM+CRF)
- 利用Nginx+Mono+Fastcgi代替IIS对Asp.Net进行反向代理
- 模块句柄(实例句柄)和句柄的区别
- java中ascii码值_java中的ASCII码值
- GIAC 2017全球互联网架构大会将于12月在上海举行
- 为什么许多器件的片选信号低电平有效,而不是高电平有效?
- .bat、python与C++程序进行批量处理的学习与实践
- 深入理解Zend执行引擎
- iOS锁屏界面音频播放控制
- php操作redis命令
- 字节跳动bytedance西瓜视频播放器研究
- 算法 - 求一个数组的最长递减子序列(C++)
- Django项目:极致果蔬(一)
- 一张图分出你是左脑发达还是右脑发达(转)
- winform form.show() 以及form.showdialog()区别 以及form.show()控件不显示解决办法
- JDK10新特性讲解