第三课 的主要内容是:
(今天的截图中运行工具不是用Python IDLE了,而是jupyter.)数据结构:元组/字典
循坏:while循环/循环控制/嵌套循环
函数:如何自定义函数
案例讲解:工资计算器函数
元组:元组()和列表[ ] 非常相似,都是由若干值组成的一个序列;
元组中存储的值可以是任何数据类型;
元组(主席台)中的任何元素都是不可变的,列表(观众席)可变;
元组的数据结构不需要改变,因而在内存使用和表现上,元组比列表更有效率;
可以把列表转换成元组;
元组类型
索引和切片等列表操作也可以使用到元组上
查找元素
元组中的元素是不可修改的,而列表是可以修改的。
看出来了吗?前面出错的6和7,其实是不熟悉语句操作造成的。
红色警报在6中出现,是因为没有引号表示元素,加上索引列表的时候,用的是中括号而不是小括号。
红色警报在7中出现,是因为括号用错了。
8是正确修改列表中的元素的示范。
9表示的是元组中的元素不可修改。错误提示是“类型错误”,告诉你在元组中的元素是不能被赋值的。
字典(dictionary)
可以看作是键(key)和值(value)之间的一系列一一对应关系
中间用:冒号来区分键和值
字典VS列表列表由整数作为索引,字典由key作为索引
列表中的元素有顺序,按索引0,1,2。。。这么排列
字典中的元素没有固定顺序,常用字符串类型做key
列表和字典都是可变类型,可进行增删改操作
都可以通过 [ ] 获取元素
列表有序,字典中的元素是无序
在一对一的查找方面,字典比列表更方便
这是列表查找,略显冗长
下图是用字典来索引上图内容的过程,只需要一步:
字典看起来使用是更方便的
如何获取字典的 keys 和 values.下图演示过程。
那个是单个序列列出来的,要是想要同时获得键值对的话,用items 语句, 得到的每一个元素都是一个元组(因为都是用圆括号括起来的)
获取keys和values,还有键值对(16)
我想不明白的是,为什么这里16输出分键值对之间,不是用冒号连接而是用逗号呢?
通过key键来获取value值
上图中,想要输出France对应的值,除了直接检索之外,还可以用到get语句,在这个语句中得出的结果是一样的,但是注意到,用get和不用get还有有一点区别的,用get的时候,索引的那个元素是用圆括号包裹起来的,而不用get的时候,是用方括号包裹起来的。所以,我肯定会手贱一下,看看要是没有遵循这个括号的区别,结果会是什么:
括号不对的运行结果
搜索字典中没有没有的Britain这个元素,结果是什么呢?
想要在这对数据里面问:“喂,Britain在不在里面啊?” 可以用in语句来查找
答案是False,也就是里面并没有Britain兄弟啊!
或者用另外一种方式来查找,直接用20那条语句的结果是出错,所以可以用回get语句,要是没有的话,直接是没有输出。
但是有人觉得这程序太没礼貌了吧!问你一句你一点反应都没有?!所以就有了22语句,意思就是,要是里面有Britain兄弟的话,你就跟我说一声Unknown吧,至少有回应啊!
请注意,这里包裹起来的语句之间,用的是逗号。
字典的增删改:
增加元素
增加字典内容
我在这对数据里面找不到Britain兄弟怎么办?那我把它加进去呗!用索引形式的方括号包裹Britain兄弟,后面赋值 London,然后我们重新输出Europe,里面就有刚加进去的Britain了!
而在这个过程之中,可以看到输出的结果并没有按照之前的顺序来排列,所以也可以看出:字典中的元素是没有顺序的。
修改元素
修改字典元素
需要修改元素,把小写变成大写,重新赋值,就可以了。
删除元素
删除字典元素
还是一样的套路,用del 语句。
拿回我们上节课的案例,还记得我们上节课还不会字典这个东西,只会序列的时候,是用了多少步才走到最后吗?今天学了一样新技能,简化了多少!
案例
过程中把获取单词列表的split语句打错了,结果有是红色警报,就是说找不到那个错误的命令是什么,所以我开始理解“脚本”的意思其实是在基础链上定义很多个含义,然后后面运行时直接打那个码,就能在当初设定的范围里面运行出那个值。
这个案例挺多新的知识点要学的:
split语句来获取单词列表,也就是可以把重复的单词重新列出来,每个数量只有1;
用dict语句来初始化一个空的字典;
用word来赋值一个初始为0的字典,在words中查找,得出一个新的字典;
用循环for。。。in。。。来遍历序列里面的元素,“遍历”这个词真的是莫名高大上!
还有这篇前文提到的怎么找Britain兄弟,要是不在的话程序也得喊一声这个功能,这里是用 counts[word] = counts.get (word,0) +1 来实现的。也就是要是在遍历words这个字典中的元素中找到一个相同的值,那就在这个值上面+1,要是找不到这个值,那就输出为0.
所以最后的结果就是这样啦!和上节课的结果是一毛一样的!
然而,我很好奇,为什么Python里面的词一定就是要那个词呢?其他词不行吗?就像上面,为什么一定要用 counts,我用 datas 取代 counts 试了试
用 datas 取代 counts
“不能赋值”,所以词还是要老实跟着打?
可是我怎么知道每个词在程序里面的含义呢????
这个案例是为了找出这句话中出现最高词频的词以及它的次数,前面是把这两个要统计的词和数梳理出来了,下面就是要在梳理的结果之后得出最高值
找出最高词频的单词
这种 a.b 的语句好像 a 都是赋值过的序列或者字典,而 b 是已经定义好的脚本。在上图是把 bigcount 和 bigword 初始化,然后用循环语句和 or 语句运行,最后找到最大值和最大值的数量。
在 “ for word,count in counts. items(): ” 中,word和 count 是一组键值对,这个键值对在counts这个键值对中找东西,就像前文在Europe中找Britain一样。
items搭配在这里,为了显示counts这个键值对更加明显?
下面的语句是逐一筛选,如果这个值C大于刚刚那个值D,那这个值C就是新的输出,取代了D。
最后得出了结果最高词频是the ,出现次数为7
最后是作业的检验:
作业3-1
然而,前面用了两千多个字和那么多图的讲解,把自己看作是一个白痴讲了一天,我理解的做法是这样的:
第一下,直接是Europe['France' :capital ], 此时想浮起微笑面对这个白痴。这个时候还是学不会字符上加引号!都第三节课了!!!
然而加了引号的33号运行,还是错误的,那我加一个方括号啊!还是错误。。。
然后我去作业区,偷看同学们的作业是怎么做的,自己运行一遍:
加入一个键值对,好像比找巴黎要容易一点,毕竟也是对着打了4遍了。