效果图:

实现代码:

dic = {
'人物':{
'帽子':{'前年玄铁帽'},
'武器':{'屠龙宝刀'}
},
'属性':{
'力量':{35},
'敏捷':{66}
},
'任务':{
'主线任务':{'拯救世界'},
'支线任务':{'扶老奶奶过马路'}
}
}
current_leve = dic
parent_leve = dic
all_leve = []
where = 0
while True:
for key1 in current_leve:
print(key1)
choice = input("You choice:")
print('返回上一级:返回', '\t', '退出程序:退出')
if(choice == '返回'):
where = 1
elif(choice == '退出'):
where = 2
else:
all_leve.append(parent_leve)
all_leve.append(current_leve[choice])
parent_leve = current_leve[choice]
current_leve = all_leve.pop() if(where == 1 ):
current_leve = all_leve.pop()
where = 0
if(where == 2):break 解析:
这是一个多层字典的字典嵌套,重点在于弄明白它的层级关系(我一遍遍的调错调了一个小时,总算是达到预期效果了,虽然逻辑上还是有点问题,需要改进)。
在本例中,字典分为三层,第一次打印最外层字典的键,选择相应键后再次打印下一层字典键,选择后输出对应键内容。
本身逻辑也不是特别复杂,重点在于如何保存“键”,这个代码是我看教学视频借用的,巧妙之处在于他用列表存储字典的键,且通过字典变量来在不同层级的键之间进行转换(赋值),举个例子:dic = {a:{b:{c:{}}},很明显这是一个字典嵌套,如果我想取到字典键b所存储的值,必须print(dic[a][b]),这样看没什么问题,很简单,但当我想要取c呢?答案是
print(dic[a][b][c]),如果我想遍历的话就要分析“[]”的个数以及层数关系,但如果我用字典变量x{}来代替每一层的变化,比如说x = dic[a],那么x[b]就等于dic[a][b],同理,当我每进入下一层字典时,都让x = x[“下一层键值”],如x = x[b],则现在x 就等于 dic[a][b],c对应的值也就能通过x[c]取到了,这样大大减少了每一层字典的循环次数(重复代码)
另一个要注意的点:返回,即保存上一层甚至是多层的值,保存一层还好说,随便再加个字典变量就可以存下替换前的字典,但如何存储多层呢?在这里我用的是列表,先把最外层存进去,然后每进入下一层,用一个值保存本层并添加到列表中,本层变量后移,当返回上一层时,每返回一次列表弹出一个字典(其实是字典的状态,即字典的键值),我的代码中是用的增加,弹出来完成本层字典移动到下一层,与直接变量赋值没太大区别。
其实这些都还好,我最困惑的还是怎么样能自动快速的导入字典,这个是个挺麻烦的问题,我本来想弄个中国各省市名称的那种的,名字是从网上直接下的,结果往字典下入的时候出问题了,折腾了好长时间,最后完成的是能导入字典的第一层,但再进入第二层的时候就老是报错,回头我得再研究研究,总之自动导入字典肯定是可以实现的。

Python学习之字典--三级菜单的更多相关文章

  1. Python学习之编写三级菜单(Day1,作业二)

    作业二:多级菜单 三级菜单 可依次进入各子菜单 在各级菜单中输入B返回上一级Q退出程序 知识点:字典的操作,while循环,for循环,if判断 思路: 1.开始,打印一级菜单让用户进行选择(可以输入 ...

  2. Python学习5,三级菜单实例

    _author_ = "Happyboy" data = { '北京':{ "昌平":{ "沙河":["Happyboy" ...

  3. Python进阶实战之三级菜单

    目录 一.Python进阶实战之三级菜单 1.1 面条版 1.2 文艺青年版 一.Python进阶实战之三级菜单 打印省.市.县三级菜单 可返回上一级 可随时退出程序 1.1 面条版 menu = { ...

  4. python第四天 三级菜单新思路

    今天是一个坎,在做三级菜单时卡住了,因为想要简洁的代码,就要用到递归函数,卡的不要不要的!不过最后在同学老师的提点帮助下,还是解决了! 2017-5-10发现之前的代码有BUG今天 修改了! 作业要求 ...

  5. Python学习笔记(字典)

    今天学习一个python中的基本类型--字典(dictionary) 字典这种数据结构有点像我们平常用的通讯录,有一个名字和这个名字对应的信息.在字典中,名字叫做“键”,对应的内容信息叫做“值”.字典 ...

  6. python基础之省份三级菜单

    菜单 menu = { #定义一个字典 '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家 ...

  7. python学习09——字典(3)

    今天写了一道python字典题目,用了上次字典(2)中的方法,代码如下: json = {', 'IP':'10.0.0.1'} def find_value(themap, word): if wo ...

  8. Python学习07——字典(2)

    笨办法学Python第40节,上次用的第三版的书,这次是第四版的书. 这一节的代码如下: cities = {'CA':'San Francisco', 'MI':'Detroit', 'FL':'J ...

  9. python学习05——字典

    笨办法学python第39节 这节主要讲解的是字典,首先字典和列表的两个区别是: 1. 列表中可以通过数字找到列表中的元素,是数字作为索引的:字典中可以通过任何东西找到想要的元素,即字典可以将一个物件 ...

随机推荐

  1. vue中的data用return返回

    为什么在大型项目中data需要使用return返回数据呢? 答:不使用return包裹的数据会在项目的全局可见,会造成变量污染:使用return包裹后数据中变量只在当前组件中生效,不会影响其他组件. ...

  2. 纯CSS3实现图片展示特效

    本文中要实现的一个纯CSS3的图片展示特效,以前只能用JavaScript实现,可想而知会受到多方面的限制,特别是性能.而今天我们将用简单的CSS3代码实现,你会发现它的动画效果在现代浏览器的帮助下无 ...

  3. import time 进度条动态输出26个字母

    # 2018-08-06 19:42:51 import time # 调用时间模块 num = 97 # 字母a while num <= 115: # print(chr(num), end ...

  4. springboot新手脱坑之无法下载依赖包

    1. Apache maven 3.39配置 1.环境变量自己配置, 2.配置阿里云镜像和本地仓库 <localRepository>D:\Apache\maven\repository& ...

  5. <每日一题>算法题:集合求并集并排序

    题目描述 给你两个集合,要求{A} + {B}. 注:同一个集合中不会有两个相同的元素. 输入描述: 每组输入数据分为三行,第一行有两个数字n,m(0 ≤ n,m ≤ 10000),分别表示集合A和集 ...

  6. shell脚本练习04

    ######################################################################### # File Name: -.sh # Author ...

  7. 分析Hive表和分区的统计信息(Statistics)

    类似于Oracle的分析表,Hive中也提供了分析表和分区的功能,通过自动和手动分析Hive表,将Hive表的一些统计信息存储到元数据中. 表和分区的统计信息主要包括:行数.文件数.原始数据大小.所占 ...

  8. UBOOT把文件写入 NandFlash

    如果把一个传到内存中的文件写入到 Nand Flash 中, 如:新的 uboot.bin, zImage(内核), rootfs 等, 如果做呢?我们可以用 Nand Flash 命令来完成. 但是 ...

  9. windows10 vs2019 + opencv 3.4.7环境搭建

    windows vs2019 + opencv 3.4.7环境搭建 安装Opencv 3.4.7 下载 Opencv 第1步 进入 opencv releases 页面,点击 "Window ...

  10. xcart-子分类/语言不显示

    由于数据库的版本不同,表名会区分大小写的情况,这样就导致xcart语言相关的信息显示不出来,此时只需更改根目录下的init.php文件,如下: 改成小写的就OK了.