作业二:多级菜单

(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. bootstrap-switch与angularjs结合使用

    bootstrap-switch和angularjs结合使用 由于angularjs的dom操作总是先执行,导致$(input[name="switch"])找不到元素,所以使用d ...

  2. 离线下载pip包安装

    Host-A 不能上网,但是需要在上面安装python-package 通过另外一台能上网的Host-B主机 1. 下载需要离线安装的Packages 在Host-B上执行如下命令: 安装单个Pack ...

  3. Java入门系列(二)Java常用关键字

    53个关键字 在JAVA中目前一共有53个关键字:其中由51+2个保留字=53个关键字 访问控制 private protected public default              类.方法和 ...

  4. 第二回 C#和JAVA 语法差异性对比

    1.继承  C#用 :  java用 extends 继承父类   implements 2.Java : 一个源文件中只能有一个public类  可以有多个非public类  源文件的名称应该和pu ...

  5. 让老版本IE支持HTML5

    一直想入手C3和H5,但因为所开发的项目一直要求兼容IE7,IE8.而这两个浏览器并不支持html5,所以一直都在观望而未真正的投入太多精力去学习.尽管我知道h5和c3是主流. 在最近的项目开发中,偶 ...

  6. HDU 2391 Filthy Rich (dp)

    题目连接 Problem Description They say that in Phrygia, the streets are paved with gold. You're currently ...

  7. python Linux flask uwsgi nginx 在centos7.3部署

    0.直接上uwsgi和nginx安装命令 linux 安装uwsgi yum groupinstall "Development tools" yum install zlib-d ...

  8. mybatis的配置文件中<selectKey>标签问题

    1.mybatis的配置文件中,使用sequence生成主键 未执行add方法之前,主键未生成(null):刚执行add之后,主键即生成(212) 这里的重点是,一旦执行add方法,配置文件中的sel ...

  9. cdn_一些常用的cdn地址

    https://code.jquery.com/jquery-3.3.1.jshttps://cdn.bootcss.com/jquery/2.1.4/jquery.min.js https://cd ...

  10. Html5使用history对象history.pushState()和history.replaceState()方法添加和修改浏览历史记录

    根据网上参考自己做个笔记:参考网址:http://javascript.ruanyifeng.com/bom/history.html history.pushState() HTML5为histor ...