第23课 修炼内功for循环


循环第一课,不是罚抄课文,而是抄写名字。抄写自己的名字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打印出来,看看是怎么计数的。

程序运行结果如下: