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

流程图如下

最新文章

  1. bzoj1720: [Usaco2006 Jan]Corral the Cows 奶牛围栏
  2. C# DataGridView使用记录分享
  3. CSS与JQuery的相关问题
  4. C#表达式树的初步了解
  5. Longest Substring Without Repeating Characters ---- LeetCode 003
  6. 只有innoDB才允许使用外键
  7. Linux Kernel 4.8分支第4个候选版本发布
  8. UVa 808 (建坐标系、找规律) Bee Breeding
  9. FPGrowth算法原理
  10. 【思路解析】discuz 帖子设置封面 setthreadcover 表pre_forum_threadimage
  11. C++构造 下一个排列 的函数
  12. word设置每页50行
  13. Web Service进阶(二)如何用Apache TCPMon来截获SOAP消息
  14. ECMA6 New Features
  15. Java中的NIO基础知识
  16. 属性集合java.util.Properties
  17. windows下apache httpd2.4.26集群完整搭建例子:下载、启动、tomcat集群例子
  18. Rabbitmq(4) 订阅模式
  19. S0到S5状态讲解
  20. 关于python无法显示中文的问题:SyntaxError: Non-ASCII character &#39;\xe4&#39; in file test.py on line 3, but no encoding declared。

热门文章

  1. ARM开发工具软件命令具体解释---嵌入式回归第三篇
  2. 【LeetCode】Permutations II 解题报告
  3. 对称加密算法-DES以及DESede算法
  4. MYSQL数据库的导出的几种方法
  5. Debian7/8安装最新的nginx稳定版本
  6. malloc,我误解你了
  7. 本系列love2d示例代码错误集中整理
  8. 由于内部错误,服务器无法处理该请求。有关该错误的详细信息,请打开服务器上的 IncludeExceptionDetailInFaults (从 ServiceBehaviorAttribute 或从 &lt;serviceDebug&gt; 配置行为)以便将异常信息发送回客户端,或打开对每个 Microsoft .NET Framework SDK 文档的跟踪并检查服务器跟踪日志。
  9. 测试网站访问速度的方法(GTmetrix)
  10. 【BZOJ】1045: [HAOI2008]糖果传递(中位数)