题目,有一个动植物对应的字典内容如下,请根据用户输入列出对应的动物或者植物,实现字典三级菜单功能
dic = {
"植物":
{"草本植物":
["牵牛花","瓜叶菊","翠菊","冬小麦","甜菜"],
"水本植物":
["乔木","灌木","半灌木","如松","杉","樟"],
"水生植物":
["荷花","千屈菜","菖蒲","黄菖蒲","水葱","再力花","梭鱼草"]},
"动物":
{"两栖动物":
["山龟","山鳖","石蛙","娃娃鱼","蟾蜍","龟","鳄鱼","蜥蜴","蛇"],
"禽类":
["雏鸡","原鸡","长命鸡","昌国鸡","斗鸡","长尾鸡","乌骨鸡"],
"哺乳类动物":
["虎","狼","鼠","鹿","貂","猴","嫫","树懒","斑马","狗"]}}

vim day13-1.py

dic = {
"植物":
{"草本植物":
["牵牛花","瓜叶菊","翠菊","冬小麦","甜菜"],
"水本植物":
["乔木","灌木","半灌木","如松","杉","樟"],
"水生植物":
["荷花","千屈菜","菖蒲","黄菖蒲","水葱","再力花","梭鱼草"]},
"动物":
{"两栖动物":
["山龟","山鳖","石蛙","娃娃鱼","蟾蜍","龟","鳄鱼","蜥蜴","蛇"],
"禽类":
["雏鸡","原鸡","长命鸡","昌国鸡","斗鸡","长尾鸡","乌骨鸡"],
"哺乳类动物":
["虎","狼","鼠","鹿","貂","猴","嫫","树懒","斑马","狗"]}} #循环加序号打印key
li = [] #定义一个空列表,用来存放第一次循环的key及本题的"动物","植物"
for i,v in enumerate(dic,1): #for循环,使用enumerate方法生成序号,序号是从1开始
print(i,v) #打印序号加第一个key 分别为1 动物 2 植物 由于字典是无序的这里序号可能会有变化
li.append(v) #将key作为列表的元素追加至列表li此时 li = ["动物","植物"]同样顺序可能有变
u_c = input(">>>") #1 #等待用户输入选择输入对应的大类如输入1代表选择了动物2代表选择了植物,这里为了方便假设输入为数字
u_c = int(u_c) #将输入的字符串转换成整数
li1 = [] #定义一个空列表用来存放用户选择大类下的小分类
for i,v in enumerate(dic[li[u_c-1]],1): #for循环根据用户输入假如输入1选择动物则迭代动物这个key下面的分类
print(i,v) #列出对应的序号及分类
li1.append(v) #假如选择的是动物li1 = ["禽类","哺乳类动物","两栖动物"]
u_c1 = input(">>>>") #提示用户输入对应的数字
u_c1 = int(u_c1)
for i in dic[li[u_c-1]][li1[u_c1-1]]: #根据用户输入列出对应的三级分类项,假如选择了禽类对应的数字列出所有禽类
print (i)

以上只允许一次性输入,下面加入无限循环可以输入b回退输入q退出

vim day13-2.py

dic = {
"植物":
{"草本植物":
["牵牛花","瓜叶菊","翠菊","冬小麦","甜菜"],
"水本植物":
["乔木","灌木","半灌木","如松","杉","樟"],
"水生植物":
["荷花","千屈菜","菖蒲","黄菖蒲","水葱","再力花","梭鱼草"]},
"动物":
{"两栖动物":
["山龟","山鳖","石蛙","娃娃鱼","蟾蜍","龟","鳄鱼","蜥蜴","蛇"],
"禽类":
["雏鸡","原鸡","长命鸡","昌国鸡","斗鸡","长尾鸡","乌骨鸡"],
"哺乳类动物":
["虎","狼","鼠","鹿","貂","猴","嫫","树懒","斑马","狗"]}} #循环加序号打印key
li = [] #定义一个空列表,用来存放第一次循环的key及本题的"动物","植物"
go = True
while go:
for i,v in enumerate(dic,1): #for循环,使用enumerate方法生成序号,序号是从1开始
print(i,v) #打印序号加第一个key 分别为1 动物 2 植物 由于字典是无序的这里序号可能会有变化
li.append(v) #将key作为列表的元素追加至列表li此时 li = ["动物","植物"]同样顺序可能有变
u_c = input(">>>") #1 #等待用户输入选择输入对应的大类如输入1代表选择了动物2代表选择了植物,这里为了方便假设输入为数字
u_c = int(u_c) #将输入的字符串转换成整数
li1 = [] #定义一个空列表用来存放用户选择大类下的小分类
while go:
for i,v in enumerate(dic[li[u_c-1]],1): #for循环根据用户输入假如输入1选择动物则迭代动物这个key下面的分类
print(i,v) #列出对应的序号及分类
li1.append(v) #假如选择的是动物li1 = ["禽类","哺乳类动物","两栖动物"]
u_c1 = input(">>>>") #提示用户输入对应的数字
u_c1 = int(u_c1)
while go:
for i in dic[li[u_c-1]][li1[u_c1-1]]: #根据用户输入列出对应的三级分类项,假如选择了禽类对应的数字列出所有禽类
print (i)
u_c2 = str(input(">>>>>"))
u_c2 = u_c2.lower()
if u_c2 == "b":
li1.clear()
break
elif u_c2 == "q":
go = False
break

最后可以输入b清空li1列表然后返回上一层,输入q把go至为False然后退出整个循环

继续优化在第二层也能输入b返回上一层输入q退出

vim day13-4.py

dic = {
"植物":
{"草本植物":
["牵牛花","瓜叶菊","翠菊","冬小麦","甜菜"],
"水本植物":
["乔木","灌木","半灌木","如松","杉","樟"],
"水生植物":
["荷花","千屈菜","菖蒲","黄菖蒲","水葱","再力花","梭鱼草"]},
"动物":
{"两栖动物":
["山龟","山鳖","石蛙","娃娃鱼","蟾蜍","龟","鳄鱼","蜥蜴","蛇"],
"禽类":
["雏鸡","原鸡","长命鸡","昌国鸡","斗鸡","长尾鸡","乌骨鸡"],
"哺乳类动物":
["虎","狼","鼠","鹿","貂","猴","嫫","树懒","斑马","狗"]}} #循环加序号打印key
li = [] #定义一个空列表,用来存放第一次循环的key及本题的"动物","植物"
go = True #定义无限循环参数go初始值为True当程序运行过程中输入q则变成False退出整个循环
while go:
for i,v in enumerate(dic,1): #for循环,使用enumerate方法生成序号,序号是从1开始
print(i,v) #打印序号加第一个key 分别为1 动物 2 植物 由于字典是无序的这里序号可能会有变化
li.append(v) #将key作为列表的元素追加至列表li此时 li = ["动物","植物"]同样顺序可能有变
u_c = input("请输入一级分类") #等待用户输入选择输入对应的大类如输入1代表选择了动物2代表选择了植物
u_c = int(u_c) #将输入的字符串转换成整数
li1 = [] #定义一个空列表用来存放用户选择大类下的小分类
while go:
for i,v in enumerate(dic[li[u_c-1]],1): #for循环根据用户输入假如输入1选择动物则迭代动物这个key下面的分类
print(i,v) #列出对应的序号及分类
li1.append(v) #假如选择的是动物li1 = ["禽类","哺乳类动物","两栖动物"]
u_c1 = input("请输入二级分类输入b返回上一层输入q退出") #提示用户输入对应的分类数字或者输入b返回输入q退出
if u_c1.isdigit(): #判断u_c1输入的是否是数字
u_c1 = int(u_c1)
while go:
for i in dic[li[u_c-1]][li1[u_c1-1]]: #根据用户输入列出对应的三级分类项,假如选择了禽类对应的数字列出所有禽类
print (i)
u_c2 = str(input("输入b返回上一层输入q退出"))
u_c2 = u_c2.lower()
if u_c2 == "b":
li1.clear()
break
elif u_c2 == "q":
go = False
break
elif u_c1.isalpha(): #u_c1如果不是数字判断是否是字母
u_c1 = u_c1.lower() #全部转换成小写
if u_c1 == "b":
li.clear() #如果输入是b清空li退出循环
break
elif u_c1 == "q": #如果输入q则退出整个循环
go = False
break

这样在任何位置都可以输入b返回上一层 输入q退出了

以上可以实现在二级分类及列出动植物名称的时候退出或者返回但是一级分类哪里没有判断输入是否为数字,下面加一个if判断是否为数字并且小于或者等于一级分类的数,如果输入q则退出

vim day13-5.py

dic = {
"植物":
{"草本植物":
["牵牛花","瓜叶菊","翠菊","冬小麦","甜菜"],
"水本植物":
["乔木","灌木","半灌木","如松","杉","樟"],
"水生植物":
["荷花","千屈菜","菖蒲","黄菖蒲","水葱","再力花","梭鱼草"]},
"动物":
{"两栖动物":
["山龟","山鳖","石蛙","娃娃鱼","蟾蜍","龟","鳄鱼","蜥蜴","蛇"],
"禽类":
["雏鸡","原鸡","长命鸡","昌国鸡","斗鸡","长尾鸡","乌骨鸡"],
"哺乳类动物":
["虎","狼","鼠","鹿","貂","猴","嫫","树懒","斑马","狗"]}} #循环加序号打印key
li = [] #定义一个空列表,用来存放第一次循环的key及本题的"动物","植物"
go = True #定义无限循环参数go初始值为True当程序运行过程中输入q则变成False退出整个循环
while go:
for i,v in enumerate(dic,1): #for循环,使用enumerate方法生成序号,序号是从1开始
print(i,v) #打印序号加第一个key 分别为1 动物 2 植物 由于字典是无序的这里序号可能会有变化
li.append(v) #将key作为列表的元素追加至列表li此时 li = ["动物","植物"]同样顺序可能有变
u_c = input("请输入一级分类输入q退出") #等待用户输入选择输入对应的大类如输入1代表选择了动物2代表选择了植物
if u_c.isdigit() and int(u_c) <= i: #判断用户输入一级分类是否为数字并且是否小于一级分类数
u_c = int(u_c) #将输入的字符串转换成整数
li1 = [] #定义一个空列表用来存放用户选择大类下的小分类
while go:
for i,v in enumerate(dic[li[u_c-1]],1): #for循环根据用户输入假如输入1选择动物则迭代动物这个key下面的分类
print(i,v) #列出对应的序号及分类
li1.append(v) #假如选择的是动物li1 = ["禽类","哺乳类动物","两栖动物"]
u_c1 = input("请输入二级分类输入b返回上一层输入q退出") #提示用户输入对应的分类数字或者输入b返回输入q退出
if u_c1.isdigit(): #判断u_c1输入的是否是数字
u_c1 = int(u_c1)
while go:
for i in dic[li[u_c-1]][li1[u_c1-1]]: #根据用户输入列出对应的三级分类项,假如选择了禽类对应的数字列出所有禽类
print (i)
u_c2 = str(input("输入b返回上一层输入q退出"))
u_c2 = u_c2.lower()
if u_c2 == "b":
li1.clear()
break
elif u_c2 == "q":
go = False
break
elif u_c1.isalpha(): #u_c1如果不是数字判断是否是字母
u_c1 = u_c1.lower() #全部转换成小写
if u_c1 == "b":
li.clear() #如果输入是b清空li退出循环
break
elif u_c1 == "q": #如果输入q则退出整个循环
go = False
break
elif u_c.isalpha(): #用户输入的一级分类如果是字母并且为q则退出
u_c == u_c.lower()
if u_c == "q":
go = False
break

流程图如下

Python全栈day13(作业讲解根据用户输入选择输出字典内容)的更多相关文章

  1. Python全栈day13(作业讲解字典嵌套实现用户输入地址信息添加及查看)

    要求: 列出字典对应节点名称,根据用户输入可以添加节点,查看节点等功能,这里以地址省-市-县等作为列子,此题熟悉字典嵌套功能 vim day13-16.py db = {} path = [] whi ...

  2. python 全栈开发,Day2(in,while else,格式化输出,逻辑运算符,int与bool转换,编码)

    一.in的使用 in 操作符用于判断关键字是否存在于变量中 a = '男孩wusir' print('男孩' in a) 执行输出: True in是整体匹配,不会拆分匹配. a = '男孩wusir ...

  3. Python全栈开发,Day2(in,while else,格式化输出,逻辑运算符,int与bool转换,编码)

    一.in的使用 in 操作符用于判断关键字是否存在于变量中 ? 1 2 a = '男孩wusir' print('男孩' in a) 执行输出: True in是整体匹配,不会拆分匹配. ? 1 2 ...

  4. python 全栈开发,Day104(DRF用户认证,结算中心,django-redis)

    考试第二部分:MySQL数据库 6.  MySQL中char和varchar的区别(1分) char是定长,varchar是变长. char的查询速度比varchar要快. 7.   MySQL中va ...

  5. 老男孩Python全栈第2期+课件笔记【高清完整92天整套视频教程】

    点击了解更多Python课程>>> 老男孩Python全栈第2期+课件笔记[高清完整92天整套视频教程] 课程目录 ├─day01-python 全栈开发-基础篇 │ 01 pyth ...

  6. python 全栈开发,Day99(作业讲解,DRF版本,DRF分页,DRF序列化进阶)

    昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...

  7. python全栈开发中级班全程笔记(第二模块、第三章)(员工信息增删改查作业讲解)

    python全栈开发中级班全程笔记 第三章:员工信息增删改查作业代码 作业要求: 员工增删改查表用代码实现一个简单的员工信息增删改查表需求: 1.支持模糊查询,(1.find name ,age fo ...

  8. python 全栈开发,Day29(昨日作业讲解,模块搜索路径,编译python文件,包以及包的import和from,软件开发规范)

    一.昨日作业讲解 先来回顾一下昨日的内容 1.os模块 和操作系统交互 工作目录 文件夹 文件 操作系统命令 路径相关的 2.模块 最本质的区别 import会创建一个专属于模块的名字, 所有导入模块 ...

  9. python 全栈开发,Day98(路飞学城背景,django ContentType组件,表结构讲解)

    昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...

随机推荐

  1. 【Material Design视觉设计语言】应用布局设计

    [Material Design视觉设计语言]章节列表 [Material Design视觉设计语言]开篇 [Material Design视觉设计语言]Material Design设计概述 [Ma ...

  2. android.animation(6) - AnimatorSet

    上几篇给大家分别讲了ValueAnimator和ObjectAnimator,相比而言ObjectAnimator更为方便而且由于set函数是在控件类内部实现,所以封装性更好.而且在现实使用中一般而言 ...

  3. 1、改变 vs编辑器的主题

    打开 visual studio, 在菜单栏选择  工具 -> 扩展和更新 -> 输入 “color theme” 安装完成后,选择样式. 选择好样式后, vs 立即改变主题.再次打开样式 ...

  4. Android开发日记(七)

    trim()方法返回调用字符串对象的一个副本,但是所有起始和结尾的空格都被删除了,例子如下:String s="  Hello World   ".trim();就是把" ...

  5. hive优化总结

    一.表设计 合理分表 合理设计表分区,静态分区.动态分区 二.扫描相关 1.谓词下推(Predicate Push Down) 2.列裁剪(Column Pruning) 在读数据的时候,只关心感兴趣 ...

  6. c#开源项目[转]

    一.AOP框架 Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式.这种部署方面(as ...

  7. CSS——你所不知的 CSS ::before 和 ::after 伪元素用法(转)

    你所不知的 CSS ::before 和 ::after 伪元素用法 CSS 有两个说不上常用的伪类 :before 和 :after,偶尔会被人用来添加些自定义格式什么的,但是它们的功用不仅于此.前 ...

  8. Golang HTTP文件上传

    2018年02月08日 10:07:13 冷月醉雪 阅读数:346 标签: golangHTTP文件上传更多 个人分类: Go   版权声明:本文为博主原创文章,未经博主允许不得转载. https:/ ...

  9. VMware ESXi 启动时提示引导错误:不是VMware引导槽。找不到管理程序(bank6 not a vmware boot bank no hypervisor found)

    VMware ESXi 启动时提示引导错误: bank6 not a vmware boot bank no hypervisor found 大概中文意思是:不是VMware引导槽.找不到管理程序. ...

  10. Softmax回归推导过程

    http://www.cnblogs.com/Deep-Learning/p/7073744.html http://www.cnblogs.com/lutingting/p/4768882.html ...