题目,有一个动植物对应的字典内容如下,请根据用户输入列出对应的动物或者植物,实现字典三级菜单功能
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. 二级指针 (C语言)

    二级指针又叫双指针.C语言中不存在引用,所以当你试图改变一个指针的值的时候必须使用二级指针.C++中可以使用引用类型来实现. 下面讲解C中的二级指针的使用方法. 例如我们使用指针来交换两个整型变量的值 ...

  2. CentOS安装使用git

    yum install git yum install git-gui (可选) git config --global user.name "gg" git config --g ...

  3. $q服务的使用

    1. 创建一个Service,去服务器读取数据: // $q 是内置服务,所以可以直接使用 ngApp.factory('UserInfo', ['$http', '$q', function ($h ...

  4. 利用css3背景位置完成拼图

    .duo { width: 623px; height: 417px; margin: 100px auto; background: url(images/bg1.png) left top no- ...

  5. jvm默认垃圾收集器

    jdk1.7 默认垃圾收集器Parallel Scavenge(新生代)+Parallel Old(老年代) jdk1.8 默认垃圾收集器Parallel Scavenge(新生代)+Parallel ...

  6. Android4.4之后休眠状态下Alarm不准时的问题

    Android4.4及之后休眠状态下Alarm不准时的问题 为了减轻功耗,延长电池使用时间.Android 4.4及之后的版本号採用非精准闹钟机制.以及休眠状态下的wakeup类型的alarm不会实时 ...

  7. haproxy+keepalived实现高可用负载均衡(转)

      软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现.LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载. ...

  8. ffmpeg 从内存中读取数据 .

    http://blog.csdn.net/leixiaohua1020/article/details/12980423 ——————————————————————————————————————— ...

  9. JSON动态生成树

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. 阿里云ecs开启x11图形化桌面

    阿里云帮助文档:https://www.alibabacloud.com/help/zh/faq-detail/41227.htm 安装云服务器 ECS CentOS 7 图形化桌面 以安装 MATE ...