作业要求及提示:三级菜单

'''

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及列表相关推荐

  1. python开发基础戴歆第四章_第一阶段:Python开发基础 day04 课后练习

    第一阶段:Python开发基础 day04 课后作业 1.简述python的五大数据类型的作用.定义方式.使用方法 数字类型 字符串类型 列表 字典 布尔型 答:数字类型分为整型(int)和浮点型(f ...

  2. 第一天作业二 三级菜单的实现

    第一天作业二 三级菜单的实现 这个作业花了一定的时间,主要是卡在循环时显示不同的问题. #!/usr/bin/env python # -*-conding:utf-8-** # __Author__ ...

  3. c语言 dict数据类型,Python开发基础之Python常用的数据类型

    Python开发基础之Python常用的数据类型 发布时间:2020-08-02 20:07:19 来源:51CTO 阅读:348 作者:warrent 博文大纲 一.Python介绍 二.Pytho ...

  4. 慕课python作业_大学慕课Python编程基础作业答案

    大学慕课Python编程基础作业答案 更多相关问题 A.EnglishnessB.BritishnessC.ScottishnessD.Welshness A.beforeB.followedC.fo ...

  5. python编写登录接口与三级菜单小程序

    一:登录接口 编写思路 python登录接口登录三次失败锁定: 一:建一个数据库文件保存用户名和密码,用来判断用户是否存在 二:用户锁定文件,当用户登录三次错误后记录用户信息进入锁定文件,下次登录时就 ...

  6. dockerfile拉取私库镜像_还在用Alpine作为你Docker的Python开发基础镜像?其实Ubuntu更好一点...

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_173 一般情况下,当你想为你的Python开发环境选择一个基础镜像时,大多数人都会选择Alpine,为什么?因为它太小了,仅仅只有 ...

  7. python开发基础之数据类型、字符编码、文件操作

    一.知识点 1.身份运算: 2.现在计算机系统通用的字符编码工作方式:在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码.用记事本编辑的时候,从文件 ...

  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 #与函数有 ...

  9. 【python入门篇——12】三级菜单详解

    需求: 1.运行程序输出第一级菜单 2.选择一级菜单某项,输出二级菜单,同理输出三级菜单 3.输入出错重新选择 4.进入每一层支持返回上一级和退出 5.进入最后一层提醒 实现方法一: # __auth ...

最新文章

  1. Oracle exp/imp,备份或导入时注意的事项
  2. 卷进大厂系列之LeetCode刷题笔记:二分查找(简单)
  3. oh-my-zsh中如何去掉命令提示符前缀
  4. ROJECT SERVER如何与OUTLOOK集成使用
  5. NLP工具包(Albert+BiLSTM+CRF)
  6. 利用Nginx+Mono+Fastcgi代替IIS对Asp.Net进行反向代理
  7. 模块句柄(实例句柄)和句柄的区别
  8. java中ascii码值_java中的ASCII码值
  9. GIAC 2017全球互联网架构大会将于12月在上海举行
  10. 为什么许多器件的片选信号低电平有效,而不是高电平有效?
  11. .bat、python与C++程序进行批量处理的学习与实践
  12. 深入理解Zend执行引擎
  13. iOS锁屏界面音频播放控制
  14. php操作redis命令
  15. 字节跳动bytedance西瓜视频播放器研究
  16. 算法 - 求一个数组的最长递减子序列(C++)
  17. Django项目:极致果蔬(一)
  18. 一张图分出你是左脑发达还是右脑发达(转)
  19. winform form.show() 以及form.showdialog()区别 以及form.show()控件不显示解决办法
  20. JDK10新特性讲解

热门文章

  1. Android 手机不赚钱为啥还要做
  2. 网络流24题 最小路径覆盖问题
  3. phpcms v9中某些默认的文件路径
  4. 提取图像色彩主色调工具
  5. 使用管道和rm命令遇到的问题
  6. Truncate Table 删除表内容避免产生过多日志
  7. 恢复Cisco路由器口令
  8. 用Layer.search快速查询图元
  9. Hotmail怎么进不去?!
  10. 从头构建自己的Linux系统 -转