继续进行《Python从入门到实践》的学习。
我的手绘题图回忆一下,我们前次学习了第六章前三节。跟我学Python从小白到入门之Part6——字典002
给字典赋值,与其他变量赋值略有不同,字典中的值是一对一对的数据,每对数据都包含“键”和"值“两个方面,每对数据之间用逗号分隔,键和值之间用冒号联系。
回忆一下前一次课给字典赋值,并显示出字典中的键值对的取值,代码如下:
x={"name":"robot","color":"yellow","point":5}
print(x)
print(x["name"])
print(x["color"])
print(x["point"])
让我们继续今天的新课学习:
跟我学Python从小白到入门之Part6——字典002Part 6 字典的嵌套。
字典的嵌套,指的是:将字典存储在列表中,或者是将列表作为值存储在字典中。
嵌套一共有三种方式:第一,在列表中嵌套字典,即6.4.1我们要学习的字典列表;第二,在字典中嵌套列表,即6.4.2我们将学习的在字典中存储列表;第三,在字典中嵌套字典,这个我们将在6.4.3中学习。
6.4.1 字典列表
在编写Python代码时,我们有时需将一系列字典存储在列表中,或者将列表作为值存储在字典中,这就被称为嵌套。
我们在编写代码时,使用一个字典可以存储一个游戏角色的信息,但无法储存另一个游戏角色的信息,更不用说是游戏中全部角色的信息了,那么如何管理多个角色呢?我们就可以创建列表,列表中包含各个角色,每个角色都由一个字典来储存角色的各种信息。
比如我们现在设计一个打怪升级的游戏,一共有三种角色:
绿怪,经验值5点;黄怪,经验值10点;红怪,经验值15点。
我们分别使用字典来存储这些游戏角色信息,代码如下:
a0={'color':''green','point':5}
a1={'color':''yellow','point':10}
a2={'color':''red','point':15}
现在我们把这三个字典赋值给一个列表all
all=[a0,a1,a2]
然后使用我们第四章学习过的for语句,来打印每个列表元素,显示出它们的取值,代码如下:
for x in all:
print(x)
但我们在编制游戏的过程中,往往是有3000个绿怪、1000个黄怪、200个红怪,所以,用以上方法来逐一给字典赋值和显示就不合适了。真实情况是,我们往往用代码自动生成3000个绿怪、1000个黄怪和200个红怪,下面我们使用range()函数来生成30个绿怪,代码如下:
all=[]
for x in range(30):
a={'color':'green','point':5}
all.append(a)
for y in all[:5]:
print(y)
print('~~~~~~')
print(len(all))
下面逐一来看看各个语句的作用
1、是约定俗成的给列表赋空值,这句不能省略,因为后面第4个语句中使用到了append()函数来追加新的元素到列表all中,如果all事先没有赋值,也就是没有定义,则会出错;
2、使用for循环配合range()函数来进行语句体的循环执行,以便生成30个绿怪;
3、每次循环都给字典a赋两个键值对;
4、每次循环都给列表all中添加新的元素,这个新元素就是第3句赋值的字典a;
5、和6、使用for循环和打印语句配合来显示30个绿怪的前五个的内容,如果直接用print(y)则会不必要的显示出相同的三十个字典的键值对;
8、打印显示一行波浪线,用来在结果中更好的查看两个不同部分的内容;
10、打印显示列表all中包含多少个元素。
因为本段程序中所有语句的运行结果都会连续显示,为了便于查看,所以约定俗成,我们会如下图第8句代码,在两段代码之间加上一句打印语句显示出一串符号,来进行运行结果的分隔显示。
复习一下range()函数,因为我感觉有点忘记了,如果没有忘记的,可以跳过这一段进入下一节:
函数range()指出了一组数字的范围,我们可以利用 range() 函数的值,来作为 for 循环语句的循环变量。
函数:range(start, end, scan)
参数:
1、start:整数列表的计数会从start开始,默认从0开始。range(, 5)等价于range(0, 5);
2、end:计数会一直到end才结束,但记住一定不包括end,如:range(0, 5) 是 [0, 1, 2, 3, 4]没有5;
3、scan:指定每次整数之间的间隔,省略此项则默认间隔为1。例如:range(0, 5) 等价于range(0, 5,1)。
当range()函数内只有一个参数,则表示会产生从0开始计数的整数列表,我们上面的代码中使用的是range(30),函数内只有一个参数,则表示会产生从0开始计数直到30的整数列表。
range()函数到此复习完毕。
上一个代码中,30个游戏角色都具有相同的特征,但在真实的代码中,每个角色都应该是独立的,也可以独立地对每个角色的数据进行修改。
假设随着游戏的进行,有些游戏角色会改变颜色,并且他的点数也会改变,那么必要时,我们就可以使用for循环或者是if语句来修改某些游戏角色的颜色和经验值。
比如说我们现在要将30个绿怪的前三个的颜色修改为黄色,经验值改为10,为了确保是修改的绿怪,我们加上一个if语句进行判断,即“if y['color']=='green':”,我们接着以上代码来进行修改,后续代码如下:
all=[]
for x in range(30):
a={'color':'green','points':5}
all.append(a)
for y in all[0:3]:
if y['color']=='green':
y['color']='yellow'
y['points']=10
for y in all[:5]:
print(y)
print('~~~~~~')
复习一下列表的切片,因为我感觉有点忘记了,如果没有忘记的,可以跳过这一段进入下一节:
切片就是将整个元素的其中一部分元素作为一个整体来进行操作。
在第五个语句for y in all[0:3]:这个语句中,我们用到了all[0:3]这个内容,只针对列表all的前三个元素进行随后的处理,这就是我们在第四章第四节学习过的切片。
切片,要标明开始的第一个元素和结束的最后一个元素。这一段元素,就是我们处理的对象,相当于把整个元素切出来一部分,所以称之为切片。要注意的是,元素的索引会在最后一个元素的索引号之前停止。也就是差一行为——也就是说,我们要处理1号到5号元素,他们的索引号为0-4,但我们切片结束的索引号应该为5,这一点与range()函数是一样的。这就是我们常常所说的“差一行为”,这一点在编程中特别要引起注意。
切片方法:变量名 [ 开始索引号:结束索引号 ]
例:all [ 0:3 ]
切片到此复习完毕。
我们再来练习一下,自动生成30个游戏角色,并将前三个的颜色改为红色,经验值改为15点,代码如下:
以上内容是在列表中存储字典,列表中包含字典在实际代码中会有大量的应用:例如,要为网站每个用户创建一个字典,并将这些字典存储在一个用户列表中,在列表中所有字典的结构都相同,我们可以遍历列表,以相同的方式处理每一个字典。
6.4.2 在字典中存储列表
在字典中存储列表,也就是字典中的某一个键的值不再是单一的值,而是一个列表。
如以下代码的第二个键对应的值,就是一个有着五个元素的列表。
每当我们需要在字典中将某一个键关联到多个值的时候,就可以在放值的地方嵌套一个列表。
x={'color':'green','points': [1,2,3,4,5]}
由于字典中有多个键-值对,某一个键-值对中又还有一个列表,所以我们就要用到for循环的嵌套才能遍历与其相关联的列表。
for y in x['points']:
print(y)
下一章我们将学习最后一种嵌套:
6.4.3 在字典中存储字典
今天的学习到此结束,祝秋天快乐!
20171007
例行的ps:
上面的一个代码本来应该像下图这样
结果不知怎么滴,总是像下图这样:
找了好久,终于找到了原因,就是第八句不相同,同时发现一个惊天大秘密,就是字典里的每一个元素,可以增加内容,想要增加内容,就只需要用一个新的变量,放进去就ok了。
20171007
网友评论
```python
print('hello world!')
```
谢谢,正在学习中✌👍