博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day1作业二:多级菜单操作
阅读量:6250 次
发布时间:2019-06-22

本文共 7317 字,大约阅读时间需要 24 分钟。

作业二:多级菜单

(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 = True24 #程序标识符,控制程序什么时候停止,由于包含多层循环,当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_key32 33 print("省的编号:%d 省的名称:%s" %(p_num,p_key))34 print("+---------------------------------------------------------------+")35 find_p = input("请输入你要查询的省的编号(输入quit退出):")36 if find_p == "quit":37 break38 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] = city51 print("+---------------------------------------------------------------+")52 find_city_num = input("请输入你要查询的市的编号(输入quit退出,输入back返回上一层):")53 if find_city_num == "quit":54 active = False55 elif find_city_num == "back":56 break57 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 = False69 elif find_country_num == "back":70 break71 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 = False78 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

你可能感兴趣的文章
VMWare 安装时报错 tools-windows.msi failed报错解决办法
查看>>
java一些面试题
查看>>
如何使用dll和lib
查看>>
干货型up主
查看>>
文件与二进制流互转
查看>>
获取页面中所有dropdownlist类型控件
查看>>
【转自ITPUB】SYNONYM关于underlying table权限的小小发现
查看>>
halcon图像合并(贴图到指定位置)
查看>>
stark组件(2):提取公共视图函数、URL分发和设置别名
查看>>
android——使用Interceptor设置缓存来给服务器减负
查看>>
样式独立性的解决方案
查看>>
刷leetcode是什么样的体验?【转】
查看>>
linux内核数据结构之kfifo【转】
查看>>
c++学习笔记(新手学习笔记,如有错误请与作者联系)
查看>>
java集合复制和反转
查看>>
记录openlaw的反爬
查看>>
Matlab数据转化至python端,并写入数据库
查看>>
json字符串与json对象的相互转换
查看>>
APM最佳实践:Web 2.0和AJAX四大优化战略
查看>>
Java优先队列一些问题
查看>>