美文网首页Python世界的星辰大海
跟我学Python从小白到入门之Part6——字典002

跟我学Python从小白到入门之Part6——字典002

作者: 且听风吟闲翻书 | 来源:发表于2017-10-07 18:45 被阅读27次

    继续进行《Python从入门到实践》的学习。

    我的手绘题图
    回忆一下,我们前次学习了第六章前三节。
    跟我学Python从小白到入门之Part6——字典002

    给字典赋值,与其他变量赋值略有不同,字典中的值是一对一对的数据,每对数据都包含“键”和"值“两个方面,每对数据之间用逗号分隔,键和值之间用冒号联系。

    回忆一下前一次课给字典赋值,并显示出字典中的键值对的取值,代码如下:

    x={"name":"robot","color":"yellow","point":5}

    print(x)

    print(x["name"])

    print(x["color"])

    print(x["point"])


    让我们继续今天的新课学习:

    Part 6 字典的嵌套。

    跟我学Python从小白到入门之Part6——字典002

    字典的嵌套,指的是:将字典存储在列表中,或者是将列表作为值存储在字典中。

    嵌套一共有三种方式:第一,在列表中嵌套字典,即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代码块使用markdown语法高亮的格式是这样
        ```python
        print('hello world!')
        ```
        且听风吟闲翻书: @袁建平 @袁建平
        谢谢,正在学习中✌👍
      • 瑾兰:写的很棒,我都看懂啦。另外提一个小建议。简书写作,关于代码的写作。你可以讲简书编辑模式改为Markdown模式。方便读者阅读代码。
        且听风吟闲翻书:@瑾兰 ok,谢谢指导,第一次听说这个模式,新技能get,谢谢啦:smile:

      本文标题:跟我学Python从小白到入门之Part6——字典002

      本文链接:https://www.haomeiwen.com/subject/btvbextx.html