day1作业二:多级菜单操作

作业二:多级菜单

(1)三级菜单

(2)可以次选择进入各子菜单

(3)所需新知识点:列表、字典

要求:输入back返回上一层,输入quit退出整个程序

思路:

    (1)首先定义好三级菜单字典;

  (2)提取第一级省的编号,打印包含哪些省份,让用户输入省份的编号,能够显示对应的省,这个过程需要创建一个字典,用于存放省原有的名称和编号,以便用户输入之后进去匹配;

    (3)进入第二级菜单,市的提取,市也存放在一个字典中,以便用户输入对应的编号的时候能够到字典中查找,并返回对应的市;

  (4)根据上面输入,得到县/区的列表,遍历列表,并使用enumerate()给县/区添加编号,对应的索引只需减一即可,因为不可能让用户看到从0开始,而列表默认是从0开始的;

流程图如下:

    代码如下:

 1 import collections
 2 dict_db = {"河南":[
 3     {"郑州":["中原区","金水区","二七区","上街区","巩义市","新郑市","新密市","登封市","荥阳市","中牟县"]},
 4     {"开封":["鼓楼区","龙亭区","禹王台区","金明区","开封县","尉氏县","兰考县","杞县","通许县"]},
 5     {"南阳":["卧龙区","宛城区","邓州市","桐柏县","方城县","淅川县","镇平县","唐河县","南召县","内乡县"]},
 6     {"洛阳":["西工区","老城区","涧西区","瀍河回族区","洛龙区","吉利区","偃师市","孟津县","汝阳县"]},
 7 
 8                   ],
 9           "湖南":[
10               {"长沙":["岳麓区","芙蓉区","天心区","开福区","雨花区","浏阳市","长沙县"]},
11               {"岳阳":["岳阳楼区","云溪区","君山区","临湘市","汨罗市","岳阳县"]},
12               {"株洲":["天元区","荷塘区","芦淞区","石峰区","醴陵市","株洲县","炎陵县"]},
13               {"湘潭":["岳塘区","雨湖区","湘乡市","韶山市","湘潭县"]},
14                 ],
15            "广东":[
16                {"广州":["越秀区","荔湾区","海珠区","天河区","白云区","黄埔区","番禺区","花都区"]},
17                {"深圳":["福田区","罗湖区","南山区","宝安区","龙岗区","盐田区"]},
18                {"珠海":["香洲区","斗门区","金湾区"]},
19                  ]
20            }
21 
22 if __name__ == "__main__":
23     active = True
24     #程序标识符,控制程序什么时候停止,由于包含多层循环,当active=False的时候终止整个循环
25     #用户输入quit时,active=False,结束整个循环;用户输入back时,break,退出当前循环,跳回上一次循环
26     while active:
27         print("欢迎来到全国省市区查询系统...")
28         p_dict = {}    #用户存放编号和省份,让用户输入编号的时候可以显示身份
29         print("+---------------------------------------------------------------+")
30         for p_num,p_key in enumerate(dict_db.keys(),1):    #enumerate()添加编号
31             p_dict[p_num] = p_key
32 
33             print("省的编号:%d          省的名称:%s" %(p_num,p_key))
34         print("+---------------------------------------------------------------+")
35         find_p = input("请输入你要查询的省的编号(输入quit退出):")
36         if find_p == "quit":
37             break
38 
39         elif find_p.isdigit() and int(find_p) <= len(p_dict):
40             print("\033[32;1m%s\033[0m" %(p_dict[int(find_p)]))     #给输出进行着色
41             province = p_dict[int(find_p)]
42             # 进入第二层循环
43             while active:
44                 cities = dict_db[province]
45                 cities_dict = {}      #用于存放省对应的市,让用户输入编号的时候可以显示对应的市名
46                 print("+---------------------------------------------------------------+")
47                 for c_num, city_dict in enumerate(cities, 1):
48                     for city in city_dict.keys():
49                         print("市的编号:%s        市的名称:%s" % (c_num, city))
50                     cities_dict[c_num] = city
51                 print("+---------------------------------------------------------------+")
52                 find_city_num = input("请输入你要查询的市的编号(输入quit退出,输入back返回上一层):")
53                 if find_city_num == "quit":
54                     active = False
55                 elif find_city_num == "back":
56                     break
57                 elif find_city_num.isdigit() and int(find_city_num) <= len(cities):
58                     print("\033[22;1m%s    %s\033[0m" %(p_dict[int(find_p)], cities_dict[int(find_city_num)]))
59                     while active:
60                         #进入第三层循环
61                         countries = cities[int(find_city_num)-1][cities_dict[int(find_city_num)]]
62                         print("+---------------------------------------------------------------+")
63                         for country_num,country in enumerate(countries,1):
64                             print("县/区编号:%s        县/区名称:%s" %(country_num,country))
65                         print("+---------------------------------------------------------------+")
66                         find_country_num = input("请输入你要查询的县/区的编号(输入quit退出,输入back返回上一层):")
67                         if find_country_num == "quit":
68                             active = False
69                         elif find_country_num == "back":
70                             break
71                         elif find_country_num.isdigit() and int(find_country_num) <= len(countries):
72                             print("\033[1;1m%s    %s    %s\033[0m" %(p_dict[int(find_p)], cities_dict[int(find_city_num)],countries[int(find_country_num)-1]))
73                         else:
74                             print("对不起,您输入的编号不对,请核对后重新输入")
75                 else:
76                     print("对不起,你输入的编号有误,请核对后重新输入!")
77                     active = False
78 
79 
80         else:
81             print("您输入的编号不对,请核对后重新输入!")

    代码运行结果如下:

欢迎来到全国省市区查询系统...
+---------------------------------------------------------------+
省的编号:1          省的名称:广东
省的编号:2          省的名称:河南
省的编号:3          省的名称:湖南
+---------------------------------------------------------------+
请输入你要查询的省的编号(输入quit退出):2
河南
+---------------------------------------------------------------+
市的编号:1        市的名称:郑州
市的编号:2        市的名称:开封
市的编号:3        市的名称:南阳
市的编号:4        市的名称:洛阳
+---------------------------------------------------------------+
请输入你要查询的市的编号(输入quit退出,输入back返回上一层):3
河南    南阳
+---------------------------------------------------------------+
县/区编号:1        县/区名称:卧龙区
县/区编号:2        县/区名称:宛城区
县/区编号:3        县/区名称:邓州市
县/区编号:4        县/区名称:桐柏县
县/区编号:5        县/区名称:方城县
县/区编号:6        县/区名称:淅川县
县/区编号:7        县/区名称:镇平县
县/区编号:8        县/区名称:唐河县
县/区编号:9        县/区名称:南召县
县/区编号:10       县/区名称:内乡县
+---------------------------------------------------------------+
请输入你要查询的县/区的编号(输入quit退出,输入back返回上一层):4
河南    南阳    桐柏县
+---------------------------------------------------------------+
县/区编号:1        县/区名称:卧龙区
县/区编号:2        县/区名称:宛城区
县/区编号:3        县/区名称:邓州市
县/区编号:4        县/区名称:桐柏县
县/区编号:5        县/区名称:方城县
县/区编号:6        县/区名称:淅川县
县/区编号:7        县/区名称:镇平县
县/区编号:8        县/区名称:唐河县
县/区编号:9        县/区名称:南召县
县/区编号:10       县/区名称:内乡县
+---------------------------------------------------------------+
请输入你要查询的县/区的编号(输入quit退出,输入back返回上一层):back
+---------------------------------------------------------------+
市的编号:1        市的名称:郑州
市的编号:2        市的名称:开封
市的编号:3        市的名称:南阳
市的编号:4        市的名称:洛阳
+---------------------------------------------------------------+
请输入你要查询的市的编号(输入quit退出,输入back返回上一层):2
河南    开封
+---------------------------------------------------------------+
县/区编号:1        县/区名称:鼓楼区
县/区编号:2        县/区名称:龙亭区
县/区编号:3        县/区名称:禹王台区
县/区编号:4        县/区名称:金明区
县/区编号:5        县/区名称:开封县
县/区编号:6        县/区名称:尉氏县
县/区编号:7        县/区名称:兰考县
县/区编号:8        县/区名称:杞县
县/区编号:9        县/区名称:通许县
+---------------------------------------------------------------+
请输入你要查询的县/区的编号(输入quit退出,输入back返回上一层):back
+---------------------------------------------------------------+
市的编号:1        市的名称:郑州
市的编号:2        市的名称:开封
市的编号:3        市的名称:南阳
市的编号:4        市的名称:洛阳
+---------------------------------------------------------------+
请输入你要查询的市的编号(输入quit退出,输入back返回上一层):back
欢迎来到全国省市区查询系统...
+---------------------------------------------------------------+
省的编号:1          省的名称:广东
省的编号:2          省的名称:河南
省的编号:3          省的名称:湖南
+---------------------------------------------------------------+
请输入你要查询的省的编号(输入quit退出):quit

解析:

    多级菜单中要求输入quit退出整个循环,输入back返回上一层;这就启示我们,要设置一个程序中所有循环的运行标识符,无论在那个环节,只要用户输入quit,那么就能够退出整个循环,在上述程序中,我们设置了程序运行标识符active,开始默认是True,当我们向结束程序的时候,就把中国和标识符设置为False,这样就终止了整个程序的运行;当用户输入back的时候,我们只需要使用break结束当前循环,程序就会退出上一层循环,我们的目的也就达到了。

    上面的循环用到了层级循环,即如下:

  while True:

    pass

        while True:

      pass

      while True:

        pass

    在遍历中,我们要知道我们得到的对象的属性,是字典还是列表,还是字符串;只有这样,我们才能使用相应的方法对应相应的操作。

    enumerate()函数用来在遍历列表对象的元素的时候给元素添加序号,可以指定其实位置。比如商品编号不可能从0开始,这样不符合大众的习惯。

转载于:https://www.cnblogs.com/gengcx/p/6940190.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395501.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JDK源码分析(5)之 HashMap 相关

HashMap作为我们最常用的数据类型&#xff0c;当然有必要了解一下他内部是实现细节。相比于 JDK7 在JDK8 中引入了红黑树以及hash计算等方面的优化&#xff0c;使得 JDK8 中的HashMap效率要高于以往的所有版本&#xff0c;本文会详细介绍相关的优化&#xff0c;但是主要还是写 …

位运算-查找数组中唯一成对的数

基础实例一&#xff1a;使用位运算判断数的奇偶性 实例代码&#xff1a; public class Test {public static void main(String[] args) {System.out.println(isOdd(49));System.out.println(isOdd(50));}// 与运算public static boolean isOdd(int i){return (i & 1) ! 0;…

react-native-Cocoapods-Swift-Project

https://reactnative.cn/docs/integration-with-existing-apps/ 1、创建一个xcode工程&#xff0c;single View就行&#xff0c;项目语言选择swift&#xff0c;oc的直接生成就行不用这么麻烦。 2、把跟目录上创建 node的package.json,执行命令 npm init npm install react-nati…

第二阶段站立会议08

站立会议内容&#xff1a; 大家准备继续将代码进行融合&#xff0c;进行测试对一些功能进行优化。 1、会议照片&#xff1a; 2、任务展板&#xff1a; 3、燃尽图&#xff1a; 转载于:https://www.cnblogs.com/smcoder/p/7002539.html

git——学习笔记(三)分支管理

一、创建、合并分支 每次提交&#xff0c;git都往后走一格&#xff0c;串成一跳时间线&#xff0c;head指向的是分支&#xff0c;分支指向提交。master是主分支&#xff0c;dev是另一条分支&#xff0c;分支就像指针一样&#xff0c;合并、删除分支时&#xff0c;修改的都是指针…

阿里巴巴是如何打通 CMDB,实现就近访问的?

CMDB在企业中&#xff0c;一般用于存放与机器设备、应用、服务等相关的元数据。当企业的机器及应用达到一定规模后就需要这样一个系统来存储和管理它们的元数据。有一些广泛使用的属性&#xff0c;例如机器的IP、主机名、机房、应用、region等&#xff0c;这些数据一般会在机器…

[原创]K8_C段旁注工具6.0 新增SMB漏洞扫描

工具: K8_C段旁注工具6.0_0510[K.8]编译: 自己查壳组织: K8搞基大队[K8team]作者: K8拉登哥哥博客: http://qqhack8.blog.163.com发布: 2017/5/24 13:25:54简介: 图片: 功能: 更新历史:6.0 20170510[] C段SMB漏洞扫描(探测系统版本)[] 批量操作-文本比较提取新增内容[] 旁注查…

【公告】社区周刊即日起停刊

各位订阅51CTO社区周刊的小伙伴们&#xff0c;大家好&#xff0c;我是51CTO社区的大管家蘑菇&#xff0c;今天来是想跟大家说&#xff0c;本期周刊将是我们最后一期邮件期刊&#xff0c;没错&#xff0c;是最后一期&#xff08;请珍惜它~&#xff09;。或许你会问&#xff0c;停…

springcloud-zuul路由网关

路由网关(zuul) 在微服务架构中&#xff0c;需要多个基础的服务治理组件&#xff0c;包括服务注册与发现、服务消费、负载均衡、断路器、智能 路由、配置管理等&#xff0c;由这个基础组件相互协作&#xff0c;共同组建了一个简单的微服务系统。一个简单的微服务系统如下 图 总…

python DB.fetchall()--获取数据库所有记录列表

查询到的数据格式为列表&#xff1a; 多个元素的列表&#xff1a; 单个元素的列表&#xff1a; 转载于:https://www.cnblogs.com/apple2016/p/5734161.html

Laravel Composer 命令大全

2019独角兽企业重金招聘Python工程师标准>>> ​​​​​​​1、安装 Laravel composer create-project --prefer-dist laravel/laravel 5.xx user-project 2、.env 文件操作 生成 APP_KEY&#xff1a;php artisan key:generate 缓存 .env 配置&#xff…

linux中initrd的含义,Linux2.6 内核的 Initrd 机制解析

1&#xff0e;什么是 Initrdinitrd 的英文含义是 boot loaderinitialized RAM disk&#xff0c;就是由 boot loader 初始化的内存盘。在 linux内核启动前&#xff0c; boot loader 会将存储介质中的 initrd 文件加载到内存&#xff0c;内核启动时会在访问真正的根文件系统前先访…

VBS基础篇 - 常量

VBS基础篇 - 常量 常量&#xff1a;指的是在程序运行过程中其值保持不变的量&#xff0c;它用来保存固定不变的数值&#xff0c;字符串等常数 。 常量的定义&#xff1a;在vbscript中使用使用 Const 指令可以创建名称具有一定含义的字符串型或数值型常量&#xff0c;并给它们赋…

利用深度学习来预测股票价格变动

https://www.toutiao.com/i6644852565341110791/ 利用深度学习来预测股票价格变动&#xff08;长文&#xff0c;建议收藏&#xff09; 原创 不靠谱的猫 2019-01-10 21:01:39完整架构概述 在这篇文章中&#xff0c;我将创建一个预测股票价格变动的完整过程。我们将使用生成对抗网…

shell 本地接口自动化

一.基于http/https的接口 一般情况下&#xff0c;当前大多公司在做接口自动化的时候都会使用一些工具&#xff1b;比如&#xff1a;postman/jmeter/python自研开发接口平台。。。 以上的情况&#xff0c;都是在源码与测试使用分离的情况下实践的。也就是说&#xff1a;目前国内…

第50次二级c语言真题,2006年4月全国计算机等级考试二级C语言笔试试卷含答案

一、选择题((1)一(10)每题2分&#xff0c;(11)一(50)每题1分&#xff0c;共60分)下列各题A)、B)、C)、D)四个选项中&#xff0c;只有一个选项是正确的&#xff0c;请将正确选项涂写在答题卡相应位置上&#xff0c;答在试卷上不得分。(1)下列选项中不属于结构化程序设计方法的是…

python hashlib模块

摘要算法简介 Python的hashlib提供了常见的摘要算法&#xff0c;如MD5&#xff0c;SHA1等等。 什么是摘要算法呢&#xff1f;摘要算法又称哈希算法、散列算法。它通过一个函数&#xff0c;把任意长度的数据转换为一个长度固定的数据串&#xff08;通常用16进制的字符串表示&…

go tool trace goalng调优工具

为什么80%的码农都做不了架构师&#xff1f;>>> 你想知道你的Go程序在做什么吗&#xff1f; go tool trace 可以向你揭示&#xff1a;Go程序运行中的所有的运行时事件。 这种工具是Go生态系统中用于诊断性能问题时&#xff08;如延迟&#xff0c;并行化和竞争异常…

程序员 文本编辑器 c语言,程序员必备的五款文本编辑器

原标题&#xff1a;程序员必备的五款文本编辑器程序员的工作离不开文本编辑器&#xff0c;有人说一个txt就能搞定&#xff0c;但txt面对如今复杂的要求&#xff0c;明显有些捉襟见肘&#xff0c;下面推荐五款超级好用的文本编辑器及搭配软件&#xff0c;绝对是程序员的大爱。程…

PCH文件的创建和配置

1.PCH文件的的创建 (1)CommandN (2)打开新建文件窗口:ios->other->PCH file&#xff0c;创建一个pch文件 2.PCH文件的配置 (1)在工程的TARGETS里边Building Setting中搜索Prefix Header (2)然后在Precompile Prefix Header下边的Prefix Header右边双击&#xff0c;添加刚…