题目,有一个动植物对应的字典内容如下,请根据用户输入列出对应的动物或者植物,实现字典三级菜单功能
dic = { "植物": {"草本植物": ["牵牛花","瓜叶菊","翠菊","冬小麦","甜菜"], "水本植物": ["乔木","灌木","半灌木","如松","杉","樟"], "水生植物": ["荷花","千屈菜","菖蒲","黄菖蒲","水葱","再力花","梭鱼草"]}, "动物": {"两栖动物": ["山龟","山鳖","石蛙","娃娃鱼","蟾蜍","龟","鳄鱼","蜥蜴","蛇"], "禽类": ["雏鸡","原鸡","长命鸡","昌国鸡","斗鸡","长尾鸡","乌骨鸡"], "哺乳类动物": ["虎","狼","鼠","鹿","貂","猴","嫫","树懒","斑马","狗"]}}dic = { "植物": {"草本植物": ["牵牛花","瓜叶菊","翠菊","冬小麦","甜菜"], "水本植物": ["乔木","灌木","半灌木","如松","杉","樟"], "水生植物": ["荷花","千屈菜","菖蒲","黄菖蒲","水葱","再力花","梭鱼草"]}, "动物": {"两栖动物": ["山龟","山鳖","石蛙","娃娃鱼","蟾蜍","龟","鳄鱼","蜥蜴","蛇"], "禽类": ["雏鸡","原鸡","长命鸡","昌国鸡","斗鸡","长尾鸡","乌骨鸡"], "哺乳类动物": ["虎","狼","鼠","鹿","貂","猴","嫫","树懒","斑马","狗"]}} li = [] for i,v in enumerate(dic,1): print(i,v) li.append(v) first = input('>>>请选择') first = int(first) li1 = [] for i,v in enumerate(dic[li[first-1]],1): print(i,v) li1.append(v) second = input('>>>请选择') second = int(second) for i in dic[li[first-1]][li1[second-1]]: print(i)
以上只允许一次性输入,下面加入无限循环可以输入b回退输入q退出
li = [] go = True while go: for i,v in enumerate(dic,1): print(i,v) li.append(v) inp = input('>>>') inp = int(inp) li1 = [] while go: for i,v in enumerate(dic[li[inp-1]],1): print(i,v) li1.append(v) inp1 = input('>>>') inp1 = int(inp1) while go: for i,v in enumerate(dic[li[inp-1]][li1[inp1-1]],1): print(i,v) inp2 = input('>>>b or q') inp2 = inp2.lower() if inp2 == "b": li1.clear() break elif inp2 == "q": go = False break
最后可以输入b清空li1列表然后返回上一层,输入q把go至为False然后退出整个循环。
继续优化在第二层也能输入b返回上一层输入q退出
li = [] go = True while go: for i,v in enumerate(dic,1): print(i,v) li.append(v) inp = input('>>>') inp = int(inp) li1 = [] while go: for i,v in enumerate(dic[li[inp-1]],1): print(i,v) li1.append(v) inp1 = input('>>>输入0-9选择,b为退后 q为退出') if inp1.isdigit(): inp1 = int(inp1) while go: for i,v in enumerate(dic[li[inp-1]][li1[inp1-1]],1): print(i,v) inp2 = input('>>>b or q') inp2 = inp2.lower() if inp2 == "b": li1.clear() break elif inp2 == "q": go = False break elif inp1.isalpha(): inp1 = inp1.lower() if inp1 == "b": li.clear() break elif inp1 == "q": go = False break
以上可以实现在二级分类及列出动植物名称的时候退出或者返回但是一级分类哪里没有判断输入是否为数字,下面加一个if判断是否为数字并且小于或者等于一级分类的数,如果输入q则退出
li = [] go = True while go: for i,v in enumerate(dic,1): print(i,v) li.append(v) inp = input('>>>输入1-3选择 q为退出') if inp.isdigit(): inp = int(inp) li1 = [] while go: for i,v in enumerate(dic[li[inp-1]],1): print(i,v) li1.append(v) inp1 = input('>>>输入0-9选择,b为退后 q为退出') if inp1.isdigit(): inp1 = int(inp1) while go: for i,v in enumerate(dic[li[inp-1]][li1[inp1-1]],1): print(i,v) inp2 = input('>>>b or q') inp2 = inp2.lower() if inp2 == "b": li1.clear() break elif inp2 == "q": go = False break elif inp1.isalpha(): inp1 = inp1.lower() if inp1 == "b": li.clear() break elif inp1 == "q": go = False break elif inp.isalpha(): if inp == "q": go = False break
2、要求:
列出字典对应节点名称,根据用户输入可以添加节点,查看节点等功能,这里以地址省-市-县等作为列子,此题熟悉字典嵌套功能
db = {} path = [] while True: #定义临时字典temp temp = db #path默认是空列表根据进入的节点深度有对应的内容 for item in path: temp = temp[item] #列出节点下面对应的可选key值 print('当前可选节点',list(temp.keys()),'\n') choice = input('1:添加节点;2:查看并进入节点(Q退出/返回上一级B) \n>>>') if choice == '1': k = input('请输入要添加的子节点名称:') if k in temp: print('节点已经存在') else: temp[k] = {} elif choice == '2': k = input('请输入要查看的子节点:') if k in temp: path.append(k) else: print('子节点名称错误') elif choice.lower() == 'b': if path: path.pop() elif choice.lower() == 'q': break else: print('输入不合法') print('字典和path值为:',db,path)