课程首页 › 第5章 › 第23课

第23课 修炼内功for循环

第5章 循环是种神奇的力量· 知识点:for 循环 · 原书 5.1
插图
插图

循环第一课,不是罚抄课文,而是抄写名字。抄写自己的名字10遍,我的名字叫作“果果”,很快我就将名字的抄写任务完成了。可是有一个小朋友的名字特别复杂,叫“温馨馨”,我完成了任务,但是她还在写第二个字“馨”。

学习了Python,我们就不用害怕了。Python能帮我们解决难题。让我们一起来看Python会怎么做吧。

首先可能会想到使用复制代码的办法,将名字一遍一遍地打印出来。

虽然这样还是会很累,但是总的来说,舒服很多了。

这是我写的代码:

插图

运行程序,屏幕上打印了10个“温馨馨”。

温馨馨

温馨馨

温馨馨

温馨馨

温馨馨

温馨馨

温馨馨

温馨馨

温馨馨

温馨馨

但是这样一遍一遍地打印,还是很累,不知道Python有没有更简单的办法。

Python那么厉害,肯定有更加智能的方式。我们一起开动脑筋,突然想到了for循环语句。我们一起来改造上面的程序。

遍历数字1.

通过for循环语句将10行重复代码变成了两行,先试一试运行后的效果吧。

插图

程序运行结果如下:

温馨馨

温馨馨

温馨馨

温馨馨

温馨馨

温馨馨

温馨馨

温馨馨

温馨馨

温馨馨

这段程序只有两行,但是程序运行的结果和上面那段是一模一样的,是不是很神奇?

因为我们运用了for循环语句,for循环可以用来遍历列表1,,,,

2 3 4,,,,,5 6 7 8 9 10中的每个对象。

插图

小拓展

列表是常用的Python数据类型,它以一对方括号内再加上逗号来分隔其中的各个值。

就像这样,需要一个[开头,一个]结尾。

插图

方括号中的数据项用逗号隔开,一定要用英文格式的逗号哟。

插图

列表的数据项不需要具有相同的类型,字符串和数字可以并存。

你看"果果"和"Python"是字符串,1991和11是数字。

["果果","Python",1991,11]

创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。

遍历就是把对象的元素从头到尾访问一次。

就像我们数数一样,把1~10十个数字一个一个地数过去。

1,2,3,4,5,6,7,8,9,10,不要漏掉任何一个,按照从前往后的顺序数。

体会了一下for循环的威力,下面来看它的基本结构吧。只有掌握了它的基本结构,才能更加自如地使用它。

for循环的基本结构是这样的:

插图

for是Python中的关键字。

item是元素,这里是num,指向遍历的值。

in是关键字,告诉num要遍历的对象在它后面。

iterable是对象,可以是列表,也可以是字符串等。

比如,我们这段程序中的对象是一个列表:,,,,,,,

1 2 3 4 5 6 7,,,定义了变量,每次遍历会创建一个数字对象,并且为数8 9 10 num字对象挂上num的标签,num的指向会从1变成2,然后变成3,一直变到10,最后结束循环。

列表里有几个数字,就会循环几次。1,2,3,4,5,6,7,8,9,10一共有10个数字,就循环10次,而不是因为末尾的数字10才循环10次。

如果列表里面的数字是10,,,,,,,,,,

20 30 40 50 60 70 80 90 100你猜猜将会循环多少次呢?

插图

for循环语句冒号后面的代码块是每次循环需要执行的内容。温

print("

馨馨是每次循环要执行的代码。

插图

我们将循环中的变量num和执行的代码都打印出来,看看它们都是怎么变化的。

这个时候,我们可以很清楚地看到num的指向在循环的过程中不断地变化。现在我们将num指向的变化都打印出来。

插图

程序执行结果如下:

我是第个温馨馨

我是第个温馨馨

我是第个温馨馨

我是第个温馨馨

我是第个温馨馨

我是第个温馨馨

我是第个温馨馨

我是第个温馨馨

我是第个温馨馨

我是第个温馨馨

注意观察num指向的变化,遍历了列表中的每个数字。之前num也遍历了所有的数字,只不过我们没有将它打印出来。

插图
插图

刚刚和我的小伙伴们玩了一场掷骰子的游戏,我一共玩了6次,记录下来的点数分别是,,,,,。你能帮我把次的点数都打印出来

6 4 5 3 6 6 6吗?

插图
插图

程序运行结果如下:

我掷骰子的点数是

我掷骰子的点数是

我掷骰子的点数是

我掷骰子的点数是

我掷骰子的点数是

我掷骰子的点数是

插图

我们再来修改一下,给遍历次数标注一下,创建一个变量num,用来记录我们遍历的次数。

插图

程序运行结果如下:

我第次掷骰子的点数是

我第次掷骰子的点数是

我第次掷骰子的点数是

我第次掷骰子的点数是

我第次掷骰子的点数是

我第次掷骰子的点数是

第一个%d对应的是次数,是变量num的值,所以num在前面。

第二个%d对应的是点数,是变量count的值,所以count在后面。

小拓展

再给大家介绍一个函数,也可以完成这个效果,来看看用法吧。

插图

依次单击菜单栏的Run→Run Module选项运行程序,程序运行结果如下:

我掷骰子的点数是

我掷骰子的点数是

我掷骰子的点数是

我掷骰子的点数是

我掷骰子的点数是

我掷骰子的点数是

num取的是列表的索引,不过列表的索引是从0开始的,所以转变成次数需要加1,即num+1。

count取的是列表的元素。

列表索引和元素的对应关系如下:

插图
插图

不要着急,我带你们认识一个函数:range()。它可以很轻松地帮助我们完成1000次任务。

我们用range()来完成之前的名字抄写,抄写1000遍。

插图

程序运行结果如下:

温馨馨

温馨馨

温馨馨

温馨馨

温馨馨

温馨馨

温馨馨

温馨馨

循环1000遍,就这么简单地解决了。哈哈,喝瓶酸奶庆祝一下,我们学会了运用循环。

特别提醒

虽然使用for num in range(1000)帮助我们完成了1000次循环,但它不是从1开始一直计数到1000的,它是从0开始一直计数到999。

我们用小一点的数字来试试,将num打印出来,看看是怎么计数的。

插图

程序运行结果如下: