作业二:多级菜单

1.三级菜单

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

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

  4.打印b回到上一层

  5.打印q退出循环

流程图如下:

readme:

(1)存储三级菜单的字典;设置标识符active用来循环;

  (2)生成存储省市的字典,d1 = {1: '河南', 2: '广东', 3: '湖南'};

  (3)用户输入查询编码,如果用户输入q退出循环;如果用户输入小于1或大于3则重新输入;输入编码在range(1,4)中,则输出省,并继续循环;

  (4)生成存储市的字典d2 = {1: '开封', 2: '洛阳', 3: '周口', 4: '南阳'};

  (5)用户输入市编码,如果输入b,返回上一层循环;如果输入q,退出整个循环;如果输入大于4或小于1,提示输入的编码不对,重新让用户输入;如果输入编码在range(1,5)中,则打印省和市并继续循环;

  (6)生成省和市对应的区或县列表l1 = ['邓州市', '镇平县', '西峡县', '新野县', '唐河县'];

  (7)让用户输入市下面区或县的编码,由于列表是有序的,不需要生成字典;将用户输入的编码作为索引,如果用户输入b,则返回上一层循环;如果用户输入q退出整个循环;用户输入编码大于或小于列表索引长度,则提示用户重新输入编码;如果用户输入索引范围没有超过列表长度,则打印省、市和县或区。

  (8)结束过程。

程序如下:

#定义一个三级菜单字典
dic = {"河南":{"南阳":["邓州市","镇平县","西峡县","新野县","唐河县"],
"洛阳":["涧西区","西工区","偃师市","孟津县"],
"周口":["川汇区","西华县","商水县","淮阳县"],
"开封":["龙亭区","顺河区","鼓楼区","祥符区"],
},
"湖南":{"长沙":["芙蓉区","岳麓区","天心区","长沙县"],
"益阳":["资阳区","赫山区","沅江市","安化县"]
},
"广东":{"深圳":["罗湖区","福田区","宝安区","盐田区","龙岗区"],
"广州":["天河区","越秀区","白云区","黄埔区","番禺区"],
}
} active = True #设置一个标识符,用于用户输入"q"时退出整个循环 d1 = {}
#设置一个空字典用来存放”省“
for index,province in enumerate(dic.keys(),):
d1[index] = province
print("地区编号:%s 地区名称:%s" %(index,province))
while active:
#整个程序的循环,默认一直执行
num1 = input("请输入要查询省的编号(q为退出):")
#让用户输入要查询的省的编号
if num1 == "q":
#如果用户输入"q"则退出循环
active = False
elif int(num1)>len(d1) or int(num1) < :
#如果用户输入的数字不在编码里面,则提示用户重新输入
print("你输入的编号不对,请重新核对后输入")
else:
#如果用户输入正确,则打印相应的省,要使用用户输入的编号,因为我们对比的时候用的就是用户输入的编号
print(d1[int(num1)]) d2 = {}
#定义一个空字典,用于存放市
for index1,city in enumerate(dic[d1[int(num1)]],):
d2[index1] = city
print("城市编号:%s 城市名称:%s" %(index1,city))
while active:
#循环,input()函数要放在循环里面,这样循环的时候才能交互让用户一直输入
num2 = input("请输入你要查询的城市编号(q为退出或b为返回上一层):")
if num2 == "q":
active = False
elif num2 == "b":
break
elif int(num2)>len(d1) or int(num2) < :
print("你输入的查询编号不对,请核对后重新输入......")
else:
#打印省市
print(d1[int(num1)]," ",d2[int(num2)])
# while active:
#while active:
l1 = dic[d1[int(num1)]][d2[int(num2)]]
#定义一个列表,用户存放省市下面的县,是一个列表
while active:
for i in range(,len(l1)+):
print("市区编号:%s 市区名称:%s" %(i,l1[i-]))
num3 = input("请输入您要查询的市区编号:")
if num3 == "q":
#active用来退出整个循环,退出程序
active = False
elif num3 == 'b':
#break用来退出当前存放
break
elif int(num3) > len(l1) or int(num3) < :
print("你输入的查询编号不对,请核对后重新输入...")
else:
print(d1[int(num1)]," ",d2[int(num2)]," ",l1[int(num3)-])

学习感悟:

  (1)在这个小程序的编写中,加强了自己对列表,字典知识的掌握;

  (2)了解了在循环中,嵌套的循环的时候设置标识符active = True,可以用来退出整个循环,而每个循环中的break用来退出当前while循环,并且会返回上一层循环;

  (3)字典的嵌套,只要掌握基础列表,字典的常用功能,列表程序运行中得到的是什么,本质上就是对基础功能的使用;

  (4)要经常会过头来复习

代码的不足之处:

  (1)上面代码字典不是有序的,我们在运行的过程中可以发现,省市的编码顺序一直在改变,尝试使用collections中的模块OrderedDict()字典方法没有结果,因为OrderedDict()方法要用户输入键-值对,把用户输入的顺序作为顺序,不能直接定义一个字典d = {"k1":"v1","k2":"v2"},dic = collections.OrderedDict(d)是不可用的,生成的字典不是有序的。

  (2)网页的后台信息在数据库中存储的模式很好奇,是以字典形式存储还是文本字符串形式存储,不过猜想应该是字典的形式,文本字符串的处理方式比较麻烦。  

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

  1. Python作业之多级菜单

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

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

    作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表.字典 要求:输入back返回上一层,输入quit退出整个程序 思路: (1)首先定义好三级菜单字典: (2)提 ...

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

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

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

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

  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. laravel query builder/ Eloquent builder 添加自定义方法

    上次干这事已经是一年前了,之前的做法特别的繁琐.冗余,具体就是创建一个自定义 Builder 类,继承自 Query\Builder,然后覆盖 Connection 里面获取 Builder 的方法, ...

  2. Python内存分配

    一.前言 大多数编译型语言,变量在使用前必须先声明,其中C语言更加苛刻:变量声明必须位于代码块最开始,且在任何其他语句之前.其他语言,想C++和java,允许“随时随地”声明变量,比如,变量声明可以在 ...

  3. 「Linux+Django」Django+CentOs7+uwsgi+nginx部署网站记录

    转自:http://www.usday.cn/blog/51 部署前的准备: 1. 在本地可以运行的django项目 2. 一台云服务器,这里选用Centos系统 开始部署: 首先在本地导出项目需要的 ...

  4. 「Python」python日期与字符串互转

    1str -> date import datetime detester = ‘2017-01-01' date = datetime.datetime.strptime(detester,’ ...

  5. [吴恩达机器学习笔记]13聚类K-means

    13.聚类 觉得有用的话,欢迎一起讨论相互学习~Follow Me 13.1无监督学习简介 从监督学习到无监督学习 在一个典型的监督学习中,我们有一个有标签的训练集,我们的目标是找到能够区分正样本和负 ...

  6. hadoop之安全篇

    ---------------持续更新中------------------- hadoop集群安全架构 如下图所示: --------------------------未完待续---------- ...

  7. .net core 中 identity server 4 之Topic --定义API资源

    想要让客户端能够访问API资源,就需要在Identity Server中定义好API的资源. Scope作用域:即API资源的访问范围限制. 作用域是一个资源 (通常也称为 Web API) 的标识符 ...

  8. asp.net中模拟测试smtp发邮件

    最近在编程人生里要测试一个会员邮件的功能,就写了下面的代码. 在asp.net 中,有时要测试发信SMTP,但如果在单元测试中,如果没方便好用的 smtp怎么办,其实还是有办法模拟的,下面讲解下: 在 ...

  9. iOS静态库 ---iOS-Apple苹果官方文档翻译

    iOS静态库 ---iOS-Apple苹果官方文档翻译 •什么是库? 库是共享程序代码的方式,一般分为静态库和动态库.静态库与动态库的区别? 静态库:链接时完整地拷贝至可执行文件中,被多次使⽤用就为什 ...

  10. php通过composer添加一个包以后,无法通过git将这个包的代码文件提交上去

    实际上是因为 vender 包中包含 有.git 文件,是composer 下载时下载了 该项目的github源码. 就是参数 源码优先 --prefer-source composer update ...