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

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

    作业二:多级菜单

    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(),1): 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) < 1: #如果用户输入的数字不在编码里面,则提示用户重新输入 print("你输入的编号不对,请重新核对后输入") else: #如果用户输入正确,则打印相应的省,要使用用户输入的编号,因为我们对比的时候用的就是用户输入的编号 print(d1[int(num1)]) d2 = {} #定义一个空字典,用于存放市 for index1,city in enumerate(dic[d1[int(num1)]],1): 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) < 1: 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(1,len(l1)+1): print("市区编号:%s 市区名称:%s" %(i,l1[i-1])) num3 = input("请输入您要查询的市区编号:") if num3 == "q": #active用来退出整个循环,退出程序 active = False elif num3 == 'b': #break用来退出当前存放 break elif int(num3) > len(l1) or int(num3) < 1: print("你输入的查询编号不对,请核对后重新输入...") else: print(d1[int(num1)]," ",d2[int(num2)]," ",l1[int(num3)-1])

学习感悟:

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

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

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

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

代码的不足之处:

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

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

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

你可能感兴趣的文章
AOP集成log4j日志
查看>>
浏览器兼容性工具 Spoon Browser Sandbox
查看>>
[转]用Ant实现Java项目的自动构建和部署
查看>>
5.4.4 表
查看>>
Codeforces 817F - MEX Queries
查看>>
软件需求规格说明书
查看>>
纯CSS实现展开列表
查看>>
算法基础-打开算法之门 (Thomas H.Corme 著)
查看>>
jQuery+bootstrap实现美化警告/确认/提示对话框插件
查看>>
js实现table内 某列的内容进行即时筛选
查看>>
JAVA特性-跨平台/面向对象
查看>>
利用Win10计划任务 + 弹窗,提醒你自己
查看>>
《php和mysql web开发》读书笔记
查看>>
第二章 生成、打包、部署和管理应用程序及类型
查看>>
Generate Parentheses
查看>>
括号配对问题2
查看>>
C#性能优化实践
查看>>
[HTML/CSS]display:none和visibility:hidden的区别
查看>>
Xcode导入第三方库
查看>>
css required,focus,valid和invalid介绍
查看>>