购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

5.1 循环内功修炼,掌握for循环

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

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

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

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

这是我写的代码:

代码


print("温馨馨")
print("温馨馨")
print("温馨馨")
print("温馨馨")
print("温馨馨")
print("温馨馨")
print("温馨馨")
print("温馨馨")
print("温馨馨")
print("温馨馨")

运行程序,屏幕上打印了10个”温馨馨”。但是这样一遍一遍地打印,还是很累,不知道Python有没有更简单的办法。

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

1.遍历数字

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

代码


for num in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
    print("温馨馨")

程序运行结果为:

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

因为我们运用了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指向的变化都打印出来吧。

代码


for num in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
    print("我是第%d个温馨馨" % num)

程序执行结果为:

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

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

代码


for count in [6,4,5,3,6,6]:
    print("我掷骰子的点数是%d" % count)

程序运行结果为:

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

代码


num = 0 
for count in [6,4,5,3,6,6]:
    num = num + 1
    print("我第%d次掷骰子的点数是%d" % (num,count))

程序运行结果为:

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

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

果果小拓展

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

代码 :for num,count in enumerate([6,4,5,3,6,6]):

print( "我%d掷骰子的点数是%d" %(num+1,count))

单击菜单栏的Run→Run Module运行程序,程序运行结果为:

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

count取的是列表的元素。

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

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

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

代码


for num in range(1000):
    print ("温馨馨")

程序运行结果为:

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

果果特别提醒

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

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

代码


for num in range(10):
    print (num)

程序运行结果为:

如果你想从1开始,那么将num改成num+1或者修改range(10)为range(1,11)。

range(1,11)有了两个参数1和11。

说明range()函数还可以有两个参数,一个开始的值和一个结束的值。使用for循环遍历它,会得到一个数字列表,这个列表包含中间的所有数字(但是不包含结束的值)。

果果小拓展

range()函数并不是真正地创建了一个数字列表,它返回的是一个“迭代器”,可以用循环来遍历它,从而得到一个数字的列表。

数数字:使用range()函数来数1~9。

代码


for num in range(1,10):
    print (num)

程序运行结果为:

再次分析一下,我们为range()函数设置了起始值1和结束值10,然后通过for num in range(1,10)得到了[1,2,3,4,5,6,7,8,9]的数字列表,没有包括结束值10哟。

如果没有设置起始值,程序就会默认从0开始。也可以只设置结束值,依然以数数字为例。这就和我们一开始看到的例子一样啦!

代码


for num in range(10):
    print (num)

程序运行结果为:

在上述程序中,用到了range()函数,只设置了10为结束值,默认从0开始,通过for num in range(10)得到了[0,1,2,3,4,5,6,7,8,9]的数字列表。

对比一下range(0,10)和range(10),如果没有设置起始值,程序就会默认会从0开始。

代码


for num in range(0,10):
    print (num)

程序运行结果为:

2.九九乘法表

下面我们来制作九九乘法表,大家开动脑筋。

大家应该对九九乘法表很熟悉了,总共9行,每一行对应1~9中一个数字的乘法表。下面我们先来看看怎么针对一个数字计算它的乘法表。

我们先来打印5的乘法表。

5×1=5

5×2=10

5×3=15

5×4=20

5×5=25

5×6=30

5×7=35

5×8=40

5×9=45

打印出来的样子是“5×(一个数字)=(乘积)”。

编写循环打印的代码:

代码


for num in range(1,10):
print("5×%d=%d" % (num,5*num))

程序运行结果为:

在5的乘法表程序中用到了range()函数,我们设置初始值为1、结束值为10,得到了[1,2,3,4,5,6,7,8,9]的数字列表。这样就不用像之前那样一个一个地列出所有的数字了。

这样我们可以轻松打印出一个数字的乘法表。同学们学会了吗?学会了的话,就来迎接果果老师的挑战吧。

果果大挑战

这只是一个5的乘法表,尝试挑战一下如何将乘法表完整地打印出来。

代码


for i in range(1, 10):
    for j in range(1, i+1):
        print("%d*%d=%d\t" %(j, i, i*j), end="")
    print("")

程序运行结果为:

\t表示一个空档,相当于按了键盘上的Tab按键。

end=""可以让输出不会自动分行,遇到end后面的字符串才会分行。使用""空字符串最好啦。

上面的代码中,果果老师在一个for循环里面又加了一个for循环,这种用法叫作循环的嵌套。这样通过for循环嵌套得到的乘法表是不是和大家看到的乘法表一模一样?是不是很神奇呢?快来亲自动手试试看吧!

3.列出偶数项

有没有发现,数数字和5的乘法表两个程序中,数字的增长每次都是1。如果我想让它每次增长2呢?

来看看这道题,打印出20以内的偶数。

这个程序要怎么写呢?

首先认识一下偶数,偶数是2的倍数,前后两个偶数相差为2,例如0、2、4都是偶数。

代码


for num in range(0,20,2):
    print (num)

程序运行结果为:

我们成功地打印出了20以内的偶数,用到了range()函数,但是这次range()函数有3个参数。第3个参数用于控制数字的增长值,因为偶数的前后两个数字相差为2,所以数字的增长值设置为2。

range()函数的第3个参数是不是很强大?如果觉得不够强大,果果老师再用一个倒计时的魔法让你体会一下它的强大:从10倒数到1有没有办法实现呢?下面果果老师就把这个魔法教给你:

代码


for num in range(10,0,-1):
    print(num)

程序运行结果为:

我们将range()函数的第3个参数设置为-1,可以控制数字的缩小值为-1,然后就可以倒着数数字了。怎么样?现在告诉老师range()函数是不是很厉害。在Python中还有很多很厉害的函数,后续会慢慢学到。

需要注意的是,即使倒过来,结束值也是不包括最后的那个数字的。想要把0也打印出来,必须将结束值设置为-1。

代码


for num in range(10,-1,-1):
    print(num)

程序运行结果为:

4.遍历字符串对象

在前面的例子中,我们遍历的对象都是数字。如果我们要遍历字符串对象,可以吗?当然可以了。

我有3个小伙伴,分别叫“聪聪果”“壮壮果”“美美果”,我要写出他们的名字。用程序怎么写呢?

代码


print("我有三个好朋友,名字分别为:")
for name in ["聪聪果","壮壮果","美美果"]:
    print (name)

程序运行结果为:

上述程序中,我们用for语句遍历了字符串列表["聪聪果","壮壮果","美美果"],并打印在屏幕上。

5.遍历字符串

我们不仅可以遍历字符串列表,也可以遍历字符串,如下所示:

代码


str= "我爱你,妈妈!"
for word in str:
    print (word)

程序运行结果为:

因为print是分行打印出来的,遍历后,将横着的一句话变成竖着的了。 rdxgAKix4PjVZrlrnmsirbDW+c1kepYCSAQtiQHK0X34A+m9xTwwHh8HTt90Shq7

点击中间区域
呼出菜单
上一章
目录
下一章
×