作业二:多级菜单

(1)三级菜单

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

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

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

思路:

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

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

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

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

流程图如下:

代码如下:

 import collections
dict_db = {"河南":[
{"郑州":["中原区","金水区","二七区","上街区","巩义市","新郑市","新密市","登封市","荥阳市","中牟县"]},
{"开封":["鼓楼区","龙亭区","禹王台区","金明区","开封县","尉氏县","兰考县","杞县","通许县"]},
{"南阳":["卧龙区","宛城区","邓州市","桐柏县","方城县","淅川县","镇平县","唐河县","南召县","内乡县"]},
{"洛阳":["西工区","老城区","涧西区","瀍河回族区","洛龙区","吉利区","偃师市","孟津县","汝阳县"]}, ],
"湖南":[
{"长沙":["岳麓区","芙蓉区","天心区","开福区","雨花区","浏阳市","长沙县"]},
{"岳阳":["岳阳楼区","云溪区","君山区","临湘市","汨罗市","岳阳县"]},
{"株洲":["天元区","荷塘区","芦淞区","石峰区","醴陵市","株洲县","炎陵县"]},
{"湘潭":["岳塘区","雨湖区","湘乡市","韶山市","湘潭县"]},
],
"广东":[
{"广州":["越秀区","荔湾区","海珠区","天河区","白云区","黄埔区","番禺区","花都区"]},
{"深圳":["福田区","罗湖区","南山区","宝安区","龙岗区","盐田区"]},
{"珠海":["香洲区","斗门区","金湾区"]},
]
} if __name__ == "__main__":
active = True
#程序标识符,控制程序什么时候停止,由于包含多层循环,当active=False的时候终止整个循环
#用户输入quit时,active=False,结束整个循环;用户输入back时,break,退出当前循环,跳回上一次循环
while active:
print("欢迎来到全国省市区查询系统...")
p_dict = {} #用户存放编号和省份,让用户输入编号的时候可以显示身份
print("+---------------------------------------------------------------+")
for p_num,p_key in enumerate(dict_db.keys(),): #enumerate()添加编号
p_dict[p_num] = p_key print("省的编号:%d 省的名称:%s" %(p_num,p_key))
print("+---------------------------------------------------------------+")
find_p = input("请输入你要查询的省的编号(输入quit退出):")
if find_p == "quit":
break elif find_p.isdigit() and int(find_p) <= len(p_dict):
print("\033[32;1m%s\033[0m" %(p_dict[int(find_p)])) #给输出进行着色
province = p_dict[int(find_p)]
# 进入第二层循环
while active:
cities = dict_db[province]
cities_dict = {} #用于存放省对应的市,让用户输入编号的时候可以显示对应的市名
print("+---------------------------------------------------------------+")
for c_num, city_dict in enumerate(cities, ):
for city in city_dict.keys():
print("市的编号:%s 市的名称:%s" % (c_num, city))
cities_dict[c_num] = city
print("+---------------------------------------------------------------+")
find_city_num = input("请输入你要查询的市的编号(输入quit退出,输入back返回上一层):")
if find_city_num == "quit":
active = False
elif find_city_num == "back":
break
elif find_city_num.isdigit() and int(find_city_num) <= len(cities):
print("\033[22;1m%s %s\033[0m" %(p_dict[int(find_p)], cities_dict[int(find_city_num)]))
while active:
#进入第三层循环
countries = cities[int(find_city_num)-][cities_dict[int(find_city_num)]]
print("+---------------------------------------------------------------+")
for country_num,country in enumerate(countries,):
print("县/区编号:%s 县/区名称:%s" %(country_num,country))
print("+---------------------------------------------------------------+")
find_country_num = input("请输入你要查询的县/区的编号(输入quit退出,输入back返回上一层):")
if find_country_num == "quit":
active = False
elif find_country_num == "back":
break
elif find_country_num.isdigit() and int(find_country_num) <= len(countries):
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)-]))
else:
print("对不起,您输入的编号不对,请核对后重新输入")
else:
print("对不起,你输入的编号有误,请核对后重新输入!")
active = False else:
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开始,这样不符合大众的习惯。

day1作业二:多级菜单操作的更多相关文章

  1. Python作业之多级菜单

    作业之多级菜单 菜单实现要求: 1. 列出菜单选择供选择 2. 选择对应内容进入下一级菜单 3. 任何时候都可以选择退出程序或返回上一级菜单 具体代码如下: goods = {'华为':{'A系':{ ...

  2. day1作业二:多级菜单操作(函数实现)

    作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表.字典 要求:输入back返回上一层,输入quit退出整个程序 本示例的三级菜单是一个yaml文件格式,格式如下 ...

  3. day1 作业二:多级菜单操作

    作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表.字典 要求:输入b返回上一层,输入q退出整个程序 思路:三级菜单第一级别是省,第二级别是市,第三级别是县,用户 ...

  4. day1作业二:多级菜单

        作业二:多级菜单 1.三级菜单 2.可以次选择进入各子菜单 3.所需新知识点:列表.字典 4.打印b回到上一层 5.打印q退出循环 流程图如下: readme: (1)存储三级菜单的字典;设置 ...

  5. django权限二(多级菜单的设计以及展示)

    多级权限菜单设计级标题栏 我们现在只有数据展示,要进入其他url还需要手动的输入路径,非常的麻烦,所以我们要设计 一个导航栏以及侧边多级菜单栏,这个展示是通过stark组件的设计的增删改查页面,而 每 ...

  6. 老男孩python学习之作业二---三级菜单

    因为之前花力气完成了购物小程序的作业 现在做这个三级菜单简直是so easy!! 1.显示省级菜单 2.交互,提示用户输入要查看的省份(退出e) 2.1.用户正确输入列表中的省份 3.显示市级菜单 3 ...

  7. Python学习之编写三级菜单(Day1,作业二)

    作业二:多级菜单 三级菜单 可依次进入各子菜单 在各级菜单中输入B返回上一级Q退出程序 知识点:字典的操作,while循环,for循环,if判断 思路: 1.开始,打印一级菜单让用户进行选择(可以输入 ...

  8. Day1作业---登录接口及多级菜单

    #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Ma Qing data = { "山东" :{ "济南&qu ...

  9. python作业设计:多级菜单,并可依次进入各级子菜单

    '''作业三:多级菜单 三级菜单 可依次选择进入各子菜单 所需新知识点:列表.字典 ''' data = { "北京":{ "昌平":{ "沙河&qu ...

随机推荐

  1. 在Vista操作系统中通过manifest文件使VC应用程序获得管理员权限

    原文 VC编译出来的应用程序在vista下运行,有可能因为权限问题,不能成功运行. 用以下办法,给应用程序添加一个manifest文件,程序运行时系统就会跳出UAC对话框,获得管理权限. 1.打开应用 ...

  2. P4779 【模板】单源最短路径(标准版)

    P4779 [模板]单源最短路径(标准版) 求单源最短路, 输出距离 Solution \(nlogn\) 堆优化 \(Djs\) Code #include<iostream> #inc ...

  3. VS2015调用matlab Plot函数

    最近经常采用Matlab仿真,然后C语言实现,最后需要将计算结果使用Qt的qwt或者matlab中的plot函数绘图. 因此想借用matlab的plot函数接口,使用VS2015来编写信号处理代码,最 ...

  4. Android 使用GPS获取到经纬度后 无法在Android8.0上使用Geocoder类获取位置信息

    由于我的应用在获取到经纬度后在Android8.0不能使用如下代码获取位置信息.只好使用百度地图 WEB服务API 通过调接口的方式获取位置信息. Geocoder geocoder = new Ge ...

  5. SourceTree免密克隆仓库及问题说明

    前言说明: 公司陆陆续续进新员工,新员工都需要了解公司各类资料,而公司资料都存储于gitlab中,因此,新员工需要安装工具进行资料拉取. 公司采用SourceTree的是工具.相关下载地址如下: WI ...

  6. a标签伪元素选择器

    a{ color: black; } /*未访问的链接*/ a:link{ color: red; } /*访问过的链接*/ a:visited{ color: green; } /*鼠标经过时*/ ...

  7. 天梯赛 L2-023. (模拟) 图着色问题

    题目链接 题目描述 图着色问题是一个著名的NP完全问题.给定无向图 G = (V, E),问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色? 但本题并不是要你解决这 ...

  8. C# Json字符串反序列化

    using DevComponents.DotNetBar; using MyControl; using Newtonsoft.Json; using System; using System.Co ...

  9. 关于 jQuery 中的 $.data() 方法和 jQuery 对象上的data 方法

    参见文章:http://www.it165.net/pro/html/201404/11922.html

  10. python3学习笔记.5.打包发布

    为了给别人使用将 .py 文件打包成 .exe 文件 安装 PyInstaller  ,完成 打开 Cmd 调用 path:\pyinstaller.exe -F path:\name.py 发布文件 ...