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':
break
else:
# 如果用户输入的是正确的编号,则从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 = country
province = country_dict[country_number]['country_name']
# 如果符合上面的条件,则开始执行函数,此函数的目的是在现有查询的基础上进一步查询城市和区县信息
district()
# print(country_number) # 测试用户交互式输入信息
break
else:
print("您输入的省份编号有误,请重新输入!")
python开发基础作业02:三级菜单,使用字典dic及列表的更多相关文章
- 老男孩python学习之作业二---三级菜单
因为之前花力气完成了购物小程序的作业 现在做这个三级菜单简直是so easy!! 1.显示省级菜单 2.交互,提示用户输入要查看的省份(退出e) 2.1.用户正确输入列表中的省份 3.显示市级菜单 3 ...
- python开发基础作业01:模拟登陆系统
随老男孩学习python mark 作业要求及提示:编写登录接口 ''' 练习程序:编写登录接口 1. 输入用户名和密码 2. 认证成功后显示欢迎信息 3. 输错三次后锁定 输入三次后退出,下次同样用 ...
- Python开发基础-Day3-列表、元组和字典
列表 列表定义:[]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素 特性: 1.可存放多个值 2.可修改指定索引位置对应的值,可变 3.按照从左到右的顺序定义列表元素,下标从0开始顺序 ...
- python开发基础04-列表、元组、字典操作练习
练习1: # l1 = [11,22,33]# l2 = [22,33,44]# a. 获取内容相同的元素列表# b. 获取 l1 中有, l2 中没有的元素列表# c. 获取 l2 中有, l1 中 ...
- python开发基础03-列表、元组、字典、集合操作方法汇总
列表 创建列表: li = [1, 12, 9, "age", ["石振文", ["19", 10], "庞麦郎"], ...
- Python初学者第十三天 三级菜单程序小作业
13day 作业题目: 三级菜单 作业需求: 数据结构: menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村' ...
- 深度解析开发项目之 02 - 使用VTMagic实现左右滑动的列表页
深度解析开发项目之 02 - 使用VTMagic实现左右滑动的列表页 实现效果: 01 - 导入头文件 02 - 遵守代理协议 03 - 声明控制器的属性 04 - 设置声明属性的frame 05 - ...
- python作业:三级菜单(第一周)
一.作业需求: 1. 运行程序输出第一级菜单 2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单 3. 菜单数据保存在文件中 4. 让用户选择是否要退出 5. 有返回上一级菜单的功能 二.三级菜单 ...
- 还在用Alpine作为你Docker的Python开发基础镜像?其实Ubuntu更好一点
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_173 一般情况下,当你想为你的Python开发环境选择一个基础镜像时,大多数人都会选择Alpine,为什么?因为它太小了,仅仅只有 ...
随机推荐
- Windows Server多用户同时远程登录
因为工作需要,需要使用windwos作为一个远程登录跳板机,管理员对登录windwos机器再windwos的基础上连接别的机器,普通用户也可以连接windwos机器再连接别的机器,关于管理员普通用户连 ...
- windows系统使用sketch设计的设计稿
由sketch设计的文件因为没有windows系统的sketch所以无法使用windows系统的电脑打开,那么怎么办呢?可以借助zeplin, 通过sketch(mac电脑)上传到zeplin账号,然 ...
- 文件上传过waf的方法
原文链接: https://www.cesafe.com/8411.html 原始请求包: ——WebKitFormBoundary2smpsxFB3D0KbA7D Content-Dispositi ...
- 论文阅读笔记(二)【IJCAI2016】:Video-Based Person Re-Identification by Simultaneously Learning Intra-Video and Inter-Video Distance Metrics
摘要 (1)方法: 面对不同行人视频之间和同一个行人视频内部的变化,提出视频间和视频内距离同时学习方法(SI2DL). (2)模型: 视频内(intra-vedio)距离矩阵:使得同一个视频更紧凑: ...
- Selenium3+python自动化009-iframe定位
iframe 一.frame:HTML页面中的一种框架,主要作用是在当前页面中指定区域显示另一页面元素: 二.操作Frame中的页面元素 定位元素: 1.id定位driver.switch_to.fr ...
- 2020牛客寒假算法基础集训营5 G.街机争霸 (bfs)
https://ac.nowcoder.com/acm/problem/201961 预处理出僵尸走的路径,僵尸走的周期长度应该为2k-2,在普通的bfs基础上加上一维表示时间,从当前位置x,y和和时 ...
- Python :元组,不可修改的序列
- 在多租户(容器)数据库中如何创建PDB:方法6 DBCA本地克隆PDB
基于版本:19c (12.2.0.3) AskScuti 创建方法:DBCA静默本地克隆PDB.根据 CDB1 中的 PDB1 克隆出 CDB1 中的 PDB_CLONE 对应路径:Creating ...
- c数据结构 绪论
四种逻辑结构:1:集合结构 结构中的数据元素除了同属于同一个集合的关系外,无任何其他关系2:线性结构 结构中的数据元素之间存在着一对一的线性关系3:树形结构 结构中的数据元素之间存在着一对多的层次关系 ...
- python之路之考试题目