第5关(消灭该死的重复(上))

Hi,欢迎来到第5关。记得按F11(苹果电脑请按control+command+F),给自己更好的学习体验。
上一关,我们学习了两种新的数据类型:列表和字典。
这一关,我们要学习的主题是【循环】。循环的意思是:把一件事重复执行很多遍。


第5关(消灭该死的重复(上))
文章图片
循环 每个人的生活和工作都充满了循环,很多时候,循环意味着重复和枯燥。比如你要手动输入200个员工的个人信息,比如她要一遍一遍地给不认真的人费劲口舌解释同样的事情,又比如他一成不变、如同一潭死水般的生活。
一成不变的生活终归需要你自己去打破循环,但工作的事,就大可让计算机帮一帮我们了。与人类不同,计算机不怕苦也不怕累,无聊的事情可以重复上千遍,只要能追寻到你想要的答案。
这恰恰就是编程解放人类的地方。比如你需要下载很多很多张图片,本来你是要手动操作的,而计算机通过【循环】,就可以依照某些规则,帮你一张一张地下载图片,你在一旁歇着就好。计算机干重复性的工作比你拿手。
再比如作为运营,可能需要去解散很多的用户群,本来要一个一个手动点击,而计算机通过【循环】,就可以依照某些规则,帮人一个一个解散。计算机干重复性的工作比你省力。
现在你再看“循环”这两个字,是不是跟开始不太一样了?
为什么计算机就特别擅长做重复性工作呢?
注意,是“超擅长、速度超快”,而不只是“能干活、不抱怨”。
究其原理,其实是因为代码中的【循环语句】,让计算机能够重复性地、自动地执行指令。


第5关(消灭该死的重复(上))
文章图片
循环语句 要实现“重复、自动地执行代码”,有两种循环语句可供我们选择使用:一种是for...in...循环语句,另一种是while循环语句。
“循环”在计算机中是非常重要,是最基础的编程知识,为了讲解得更加清楚,我们将循环这一章节分成了上下两关。这一关,我们将对两种循环语句形成初步的了解,并学会简单的应用。
话不多说,我们先一起来看看第一种循环的方式:for...in...循环,它也被简称为for循环。
for...in...循环语句



第5关(消灭该死的重复(上))
文章图片
for 循环 还记得前一关里,班主任点名的例子吗?本来要重复50次才能完成的任务,最后变成了3行代码。


第5关(消灭该死的重复(上))
文章图片
例子 这里的第2-3行就是for循环。
先看一段最简单的for循环代码,了解它的格式:


第5关(消灭该死的重复(上))
文章图片
循环 来,先运行一下图中的示例代码。


第5关(消灭该死的重复(上))
文章图片
例子 终端上依次出现了列表里的所有数字,对吧?我们用大白话来打个比方,以便更好地理解这段代码的意义:


第5关(消灭该死的重复(上))
文章图片
例子

第5关(消灭该死的重复(上))
文章图片
解释 for循环的3个要点即是:
1.空房间;2.一群等着办业务的人;3.业务流程 我们一个一个来看:
for循环:空房间



第5关(消灭该死的重复(上))
文章图片
房间

第5关(消灭该死的重复(上))
文章图片
空房间的学名叫【元素】(item),你可以把它当成是一个变量。那么首先,我们需要给房间取一个名字,也就是“变量名”。
为什么我总是用i?因为英文是item,所以i是常用名嘛。但其实你给这个房间取什么名字都行。
来,直接运行一下代码试试。


第5关(消灭该死的重复(上))
文章图片
是不是三种结果都一样?这就对啦,
拘束姓名。
在for循环结束之后,我们还能使用这个房间,不过这时候房间里的人是谁呢?
请运行代码体验一下:


第5关(消灭该死的重复(上))
文章图片
原来,业务结束之后,最后一个走进去的5留在了房间里,被打印了出来。
搞清楚了什么是“空房间”,我们再看看下一个要点:
for循环:一群排队办业务的人


第5关(消灭该死的重复(上))
文章图片
我们刚刚看到的“一群排队办业务的人”,
都是以列表的形式出现:[1,2,3,4,5]。还有哪些数据类型也属于“一群排队办业务的人”呢?
我觉得你已经猜到了,就是字典。来直接体验一下代码运行效果:


第5关(消灭该死的重复(上))
文章图片
我们用print(i)把“空房间”i打印了出来,发现i会逐个接待字典中的每一个【键】。
那什么不属于“一群排队办业务的人”呢?请你猜一猜:


第5关(消灭该死的重复(上))
文章图片
答案是B,字典、列表和字符串'吴承恩'都是一群排队办业务的人,但a = 5并不是。
哈哈,是不是做题时有点犹豫,看到答案后有些疑惑:为什么'吴承恩'也可以?
不要怀疑,字符串也属于“一群排队办业务的人”。打个比方,'吴承恩'三个字就像一家三口,但走进空房间办业务时,这家人是可以一个一个进去的。来试试吧。


第5关(消灭该死的重复(上))
文章图片
而整数、浮点数是不属于“一群排队办业务的人”的,如果把它们放在for循环里,代码会报错。
请你体验一下报错的代码,遇到报错后,可以把代码修改成正确的,或者点击【跳过】按钮。


第5关(消灭该死的重复(上))
文章图片
现在我们理解了:列表,字典,字符串都可以是“一群排队办业务的人”。


第5关(消灭该死的重复(上))
文章图片
还是这段代码,代码的运行结果你应该已经了然于心,是1,2,3,4,5依次出现。也就是说,当这一群排队的人依次序走进空房间,每个人都会把业务办完。
这个过程,在Python中的学名就叫做【遍历】。
其实,遍历这个词在古代汉语中就已经出现过了:


第5关(消灭该死的重复(上))
文章图片
只不过古人是遍历名山大川,一一寻访学问;而Python是遍历数据结构(列表、字典等),一一访问其中的数据。
除了列表,字典,字符串三种数据类型,我们还可以遍历其他的数据集合。比如和for循环常常一起搭配使用的:
range() 函数。



第5关(消灭该死的重复(上))
文章图片
运行后,你看到了整数0,1,2,是不是?
使用range(x)函数,就可以生成一个从0到x-1的整数序列。
它还有更多用法,再来看这段代码,并运行:


第5关(消灭该死的重复(上))
文章图片
使用range(a,b) 函数,你可以生成了一个【取头不取尾】的整数序列。
你可能会想问,我没事儿取这些整数出来干嘛?
嗯,这是个好问题。再来看一段代码,并运行:


第5关(消灭该死的重复(上))
文章图片
重要的事情说三遍,哈哈。
像这样,有了range()函数之后,当你想把一段代码固定重复n次时,就可以直接使用for i in range(n)解决问题。
来练习一下:如果你要重复打印“书桓走的第n天,想他”,n为0到10,你会怎么写?


第5关(消灭该死的重复(上))
文章图片
答案

第5关(消灭该死的重复(上))
文章图片
答案 range()函数还有一种用法,我们来直接运行体验一下:


第5关(消灭该死的重复(上))
文章图片


第5关(消灭该死的重复(上))
文章图片
你观察出规律了么?这里range(0,10,3)的意思是:从0数到9(取头不取尾),数数的间隔为3。


第5关(消灭该死的重复(上))
文章图片
好啦,我们来实战一下:请你用for循环完成1到100的整数分别乘以5的计算,并打印出来,效果就像这样:


第5关(消灭该死的重复(上))
文章图片
你会怎么写出for循环代码呢?


第5关(消灭该死的重复(上))
文章图片
你答对了!range(1,101 )表示从1-100的整数列表,不包括101。
请开始写代码吧:


第5关(消灭该死的重复(上))
文章图片
答案 老师的答案是这样的:
第5关(消灭该死的重复(上))
文章图片
我们最后来理解一下for循环的第三个要点:
for循环:办事流程



第5关(消灭该死的重复(上))
文章图片
我们以下面的代码为例:
第5关(消灭该死的重复(上))
文章图片
这两行代码中,in表示从“一群排队办业务的人”(字符串、列表、字典等)中依次取值,这个刚才我们已经学过了。
在循环的过程中,“一群排队办业务的人”会被依次取出,然后走进房间i去办理业务。
但办事流程呢?在这里流程很简单,都是print(i*5)。然后在i=1的情况下,执行一遍流程;在i=2的情况下,再执行一遍流程……一直执行到i=5,也就把这群人的事情全部办完了:


第5关(消灭该死的重复(上))
文章图片
“办事流程”的学名是【for子句】。格式是【冒号】后另起一行,【缩进】写命令。
格式对于编程来说是一件再怎么强调也不为过的“小事”,所以在这里我们再强调一下for循环的格式:


第5关(消灭该死的重复(上))
文章图片
格式 到这里,你已经掌握for循环的基本语法了,我们再做一些练习。
假设你要做大采购,让小明买醋,小红买油,小白买盐,小张买米;我们先把这堆事情写成一个字典:d = {'小明':'醋','小红':'油','小白':'盐'}
如果我们把这四个人要买的东西依次print出来,要写4句print语句:


第5关(消灭该死的重复(上))
文章图片
请你来动手用for循环代替以上重复性代码,并起到同样的效果。


第5关(消灭该死的重复(上))
文章图片
老师的答案是这样的:


第5关(消灭该死的重复(上))
文章图片
你做对了吗?如果有点不确定,可以回头补一补上一关“字典”的相关知识。
到这里,for循环的3个要点都讲解完毕:


第5关(消灭该死的重复(上))
文章图片
好了,我们学完了for循环,我们来看看另一种循环方式。
while循环



第5关(消灭该死的重复(上))
文章图片
先来看看while循环长啥样:


第5关(消灭该死的重复(上))
文章图片
你猜一猜,图中代码的运行结果会是怎么样的呢?


第5关(消灭该死的重复(上))
文章图片
还是1,2,3,4,5依次出现,对吧?我们也用大白话去解释一下这段代码。
和for循环语句不同,while语句没有“空房间”,也不是“把一群排队办业务的人做完”。它是“在一定的条件下”,“按照流程办事”。


第5关(消灭该死的重复(上))
文章图片


第5关(消灭该死的重复(上))
文章图片
很明显,while循环有2个要点:1.放行条件;2.办事流程。咱们先看第一个。
while循环:放行条件



第5关(消灭该死的重复(上))
文章图片
while在英文中表示“当”,while后面跟的是一个条件。当条件被满足时,就会循环执行while内部的代码(while子句)。
所以while循环本质上像是一个哨卡:只要事情符合条件,那就一遍又一遍的“按流程办事”。
就像在上面的例题中,只要a<5这个条件成立,就不停地办事(把a+1的结果打印出来),直到条件不成立,办事流程就停止。


第5关(消灭该死的重复(上))
文章图片
同样,while语句也要注意代码规范:


第5关(消灭该死的重复(上))
文章图片
和for循环一样,冒号和内部代码的缩进都是必不可少的。╭(╯^╰)╮写不规范的话计算机又给你报错,然后你又卡在莫名其妙的地方很久噢......
下面,我们用一个好玩儿的案例来说明while的具体用法,不晓得同学们有没有看过金庸的武侠小说《神雕侠侣》?
小说里的主角小龙女(古墓派掌门人)自小在终南山上的古墓里生活。这个门派有个规定,除非有男人愿意为掌门人死,否则掌门人永远不能出墓门半步。
在Python中,这个故事的逻辑就被翻译成:当(while)没有男人愿意为小龙女去死的时候,小龙女要一直一直一直生活在古墓里,这就是一种循环。只有当条件(没有男人愿意为小龙女去死)为假的时候,就可以打破循环,小龙女就能出古墓下山了。
这段代码我先写出来,你看看~


第5关(消灭该死的重复(上))
文章图片
第1行代码:定义了变量man为空的字符串。使用变量前要先定义变量并为变量赋值,下面我们还会继续用到变量man。
第2行代码:while后面有一个条件,当这个条件被满足时,即man != '有'时,放行、办事。开始执行循环内部代码,即第3行的代码,开始询问。
第3行代码:询问现在有男人愿意为小龙女死吗?输入完信息后,回到第2行代码,重新判断条件真假。直到条件被判断为假,即man == '有',while循环才结束。
第4行代码:while 循环结束后的代码,也是循环外部的代码。因为当有男人愿意为小龙女死的时候,while 后面的条件就为假,此时,程序会结束循环,去运行第五行代码。
我们来运行一下好了,同样需要你输入内容。你可以先随便输入几个数据,只要你输入的不是有,代码就会一直循环;直到你输入有,循环会结束。


第5关(消灭该死的重复(上))
文章图片


第5关(消灭该死的重复(上))
文章图片
幸运的是,小说的男主角杨过在因缘际会下,来到了活死人墓,和小龙女互生情愫。杨过对小龙女用情很深,愿意为她而死,所以满足了师门的规定,小龙女就可以出古墓下山了。
好了,你感受过了while循环的逻辑之后,现在我想请你自己动手练一练。放心,没那么难,有疑问的话看看小龙女的例题。
这个画风突变的故事是这样的:你家的大门是密码门,密码是你的生日816。当输错密码错误的时候,会提示“请尝试输入密码:”。直到密码输入正确,就会提示“欢迎回家!”。
终端的运行效果应该差不多长这样:


第5关(消灭该死的重复(上))
文章图片
请你补全这段代码吧:


第5关(消灭该死的重复(上))
文章图片
没有达到期望的效果 老师的答案是这样的:


第5关(消灭该死的重复(上))
文章图片
正确答案 对照正确答案,发现了自己的错误
input语句放的位置不对,导致程序或者陷入死循环,或者没完全执行到位


第5关(消灭该死的重复(上))
文章图片
做对了吧?先恭喜你呀。
那什么,或许你会有小小的疑惑(很可能也没注意到),816到底是谁的生日?偷偷告诉你,是95版《神雕侠侣》女主角李若彤的生日,永远的小龙女。


第5关(消灭该死的重复(上))
文章图片
好啦,言归正传。我们再看看while循环的第二个要点:办事流程。
while循环:办事流程



第5关(消灭该死的重复(上))
文章图片
while循环,在满足条件的时候,会一轮又一轮地循环执行代码。
我们来做道选择题,请看代码回答问题:
第5关(消灭该死的重复(上))
文章图片


第5关(消灭该死的重复(上))
文章图片
不是噢。这次print(a)不是子句,没有缩进,而是在外面哦。
这道题跟一开始的例题非常相似,唯一的区别在于print(a)有没有缩进。
有缩进的时候,print(a)也是循环中的“办事流程”,会将数字逐一打印。没有缩进的时候,循环中的“办事流程”就只有做加法,print(a)也就只会打印循环结束时的最后一个数字。
稍微有点费事是不?我们来做一下分解,看看每一行代码的含义:


第5关(消灭该死的重复(上))
文章图片
可以看到,最后一轮循环的时候a=4,然后最后a的值被加1后等于5:


第5关(消灭该死的重复(上))
文章图片
所以,缩进后的【while子句】才是会被循环执行的“办事流程”,这一点,你应该差不多明白了吧~
那,我们再来做一个小练习。
之前,我们用for循环解过“1到100分别乘以5”的题目:
第5关(消灭该死的重复(上))
文章图片
如果现在用while循环,应该怎么写呢?你来试试看。


第5关(消灭该死的重复(上))
文章图片
我的答案 如果用while循环解“1到100分别乘以5”的题目,老师的答案是这样的:


第5关(消灭该死的重复(上))
文章图片
老师的答案 到这里,for循环和whlie循环的知识就都学完了~
for循环和while循环都可以帮我们完成重复性的劳动,那到底两个循环有什么区别,什么时候用for什么时候用while呢?让我们来对比一下。
两种循环对比



第5关(消灭该死的重复(上))
文章图片
for循环和whlie循环最大的区别在于【循环的工作量是否确定】,for循环就像空房间依次办理业务,直到把【所有工作做完】才下班。但while循环就像哨卡放行,【满足条件就一直工作】,直到不满足条件就关闭哨卡。
所以说,当我们【工作量确定】的时候,我们就可以让for循环来完成重复性工作。反之,要【工作量不确定时】可以让while循环来工作:


第5关(消灭该死的重复(上))
文章图片
要把字符串'神雕侠侣'拆成一个个字符打印出来,这件事【工作量确定】,适合用for循环。
而对于“输入密码,判断输入的密码是否正确”这件事,我们并不知道要判断几遍才能得到正确密码,所以【工作量不确定】,适合用while循环。
不过有一种情况for循环和while循环都可以解决问题,那就是【把一件事情做N遍】:


第5关(消灭该死的重复(上))
文章图片
你会看到,两者都能做。不过for循环的代码相对更简洁一些。
让我们总结一下什么时候用for什么时候用while:


第5关(消灭该死的重复(上))
文章图片
总结 好啦,《消灭该死的重复(上)》所有的知识,我们就讲完了。
来到这一关的尾声,想说一说“循环”。
正如开头所说,计算机能帮我们做的,是许许多多繁杂重复的工作。
当计算机为我们解放双手,这平凡的日子就空出了一些时间。
这些时间,你会用来做什么呢?
曾有一段日子,我选择让自己的思想任意驰骋,想看看哪里是我的边缘。
后来,我用那些多出来的时间回归生活,学习陪伴家人,学习表达我的珍惜。
而此时,此地,此刻的每一个你,就是现在的我,为这些时间所做出的选择。
路还长着呢,我们下一关再会。


第5关(消灭该死的重复(上))
文章图片


第5关(消灭该死的重复(上))
文章图片


第5关(消灭该死的重复(上))
文章图片


第5关(消灭该死的重复(上))
文章图片


第5关(消灭该死的重复(上))
文章图片


第5关(消灭该死的重复(上))
文章图片


第5关(消灭该死的重复(上))
文章图片


第5关(消灭该死的重复(上))
文章图片


第5关(消灭该死的重复(上))
文章图片


第5关(消灭该死的重复(上))
文章图片


第5关(消灭该死的重复(上))
文章图片
【第5关(消灭该死的重复(上))】

第5关(消灭该死的重复(上))
文章图片

    推荐阅读