更多教程请私信~
来源:思路实验室
作者:室长
大家好,欢迎收看思路实验室出品的Python入门教程,我是室长。
上一期我们讲到了if语句,在符合某种条件的情况下执行一些代码。我们的程序比之前有了很大的进步,但这还远远不够。我们在引言中提到过一种情况:
比如说要实现一个折腾大象的程序,就可以这样:把大象装冰箱,把大象拿出来,把大象装冰箱,把大象拿出来……
我们之前把“把大象装冰箱”写成了函数,每次操作只需要调用函数就可以了,看起来方便了很多,但如果我们想写一个“折腾大象”的程序,把大象装冰箱一百次,难道我们要写一百行代码来调用函数吗?而且如果我们今天想关一百次,明天想关二百次,难道还要重新写一遍代码吗?
NONONO!这根本不符合我们“懒”的原则,因此for语句就到出场的时候了。它的写法大概是这样的:
for 什么玩意 in 一大堆玩意:
blablabla...
这个句子我们用英语的方式给它翻译一下:“对于‘一大堆玩意’里的‘什么玩意’,我们要blablabla...”。事实上程序也基本上是这么操作的,唯一的区别就是,程序会把这‘一大堆玩意’里的所有的‘什么玩意’都安排一遍才结束。
我们再次注意for语句最后的小冒号,它再次提醒我们后边的代码从属于for语句,记得要缩进。
我们实际写一个例子看一看:
这里室长把之前的“装冰箱”函数修改了一下,因为只是作展示用,没有必要把所有的内容都打印出来。另外写了一个“取出来”的函数,毕竟冰箱装一个大象已经很努力了,让它装好几个确实为难。然后再把装冰箱和取出来写进一个“单次折腾”的函数,这就是折腾大象的单元操作。
所以剩下我们需要的就是把这个单元操作重复若干次。如果你愿意,让程序重复几千次几万次都可以,反正就是多打几个0的事(我们不为996辩护,但向奋斗者致敬)。
为了防止打印的内容把室长的屏幕撑爆,这里就设置为5次。我们的for语句就写为:“for i in range(5)”。不理解也没有关系,稍后室长会详说。我们来运行一下:
可以看到大象被结结实实地关进了冰箱五次。
那我们再回过头来看一看“for i in range(5)”。看到range的颜色相比大家已经明白了,这又是一个内置函数。同时因为它在for语句中的位置,我们可以推测它的返回值是“一大堆玩意”。让我们来写个代码看一看range(5)的返回值是什么:
这返回了个寂寞啊!看来得采取迂回战术了。根据for的语法来说,range(5)是一大堆玩意,那i就应该是一大堆玩意里的什么玩意,那我们把i打印出来不就知道range(5)是一大堆什么玩意了吗?
0,1,2,3,4,就是没有5。不知道大家还记不记得室长在第六期给大家的谆谆教诲:
Python是一门真正的从零开始的语言。
所以它是列表吗?我们再用上期的type函数查看一下:
(代码是可以这么写的但是不推荐,套来套去脑袋都乱了,这已经不是套娃而是吞鲲了……)
可以看到类型还是range,不是list,所以它并不是列表。因此大家要记住了,以后如果想生成一个连续数字的列表,不可以直接用range函数。
讲了太多有点跑题了,关于range函数的详细用法室长会在函数番外篇再详细介绍。
但这个一大堆玩意的位置可不可以用列表呢?我们试一试:
结果是一模一样的,没有问题。
有同学可能要问了,之前折腾大象的for语句的代码块里没有用到 i这个变量啊?对啊,Python也没规定必须得用啊!只要一大堆玩意里为每一个玩意都执行了一次代码,这个变量出不出场都没有影响。
在引言部分室长就强调了程序顺序的重要性,在之前的课程中也多次领略了不同顺序对程序执行结果的影响。同样,for循环也是有顺序问题的,如果我们把“一大堆玩意”调整调整顺序:
那么for循环的顺序也随之更改。可见,列表虽然只是盛放一大堆元素的容器,但是还是有顺序的。
更多的时候我们往往不知道具体需要循环多少次,或者我们可能知道但实在懒得去数,怎么办?
举个例子,我们成为了动物园管理员,晚上下班以后要把所有动物装冰箱,那我们首先要拿到动物园的名单,再使用一个for循环:
看,动物已经全部被装进冰箱了,而这个过程中我们并没有去数多少个动物。
此外使用列表的好处是即便列表有了变化(比如孙越去动物园当动物了)也不会影响循环的结构。
这一期我们初步了解了for循环语句的使用,for语句往往适用于有限次循环(此处的有限次是指知道多少次,比如把大象关5次冰箱,或者能知道多少次,比如把名单上的动物都装完就完事),但有些情况我们不知道需要循环多少次,只知道做到哪种程度就可以不做了。Python同样为这种情况设计了语句。请关注下一期:只要学不死,就往死里学|while 循环和逻辑运算。