4.3.1 遍历循环:for循环

4.3.1 遍历循环:for循环

遍历循环是指逐一访问目标中的数据,例如,逐个访问字符串的字符,逐个访问列表中的元素等。Python一般使用保留字for遍历循环,语法格式如下:

for语句中的循环执行次数是根据遍历结构中元素个数确定的,遍历循环可以理解成从遍历结构中逐一提取元素,放在循环变量中,对于所提取的每个元素都执行一次<语句块>。

<遍历结构>可以是字符串、文件、组合数据类型或range()函数等。

<循环变量>用于保存本次循环中访问到的遍历结构中的元素。

1.遍历元素

使用for循环遍历字符串、列表等组合类型。

遍历字符串,代码如下:

运行结果:

遍历列表,代码如下:

运行结果:

从遍历字符串和列表的运行结果可以发现,遍历是按字符串、列表中的元素有序进行访问的,先从索引号为0的元素开始,一直到最后一个。一次循环取一个元素,将元素的值赋给循环变量。

【案例4-6】 日历的输出。

一个列表存储了2021年1月的日期,另一个列表存储了星期几的数据。请按从星期日到星期六的顺序方式将星期几和日期输出。已知1月1日是星期五,每个数字占8个字符的宽度,数字之间以竖线“|”分隔。输出结果如下:

案例分析:

·先对星期几的列表进行遍历,将星期输出在一行中。再确定1日的位置,在1日前面输出相应数量的空格。

·对日期列表进行遍历,将日期从1日开始遍历输出,每输出一个日期,就将位置值加1。如果输出的位置是7的倍数,则换行,否则不换行输出日期。

实现代码如下:

2.range()函数

range()函数可以创建一个整数列表,range()函数的语法格式如下:

函数说明:

·start:表示列表的起始位置,该参数可以省略,省略则表示列表默认从0开始。

·stop:表示列表的结束位置,开区间,即不包含stop的值,如range(6)、range(0,6)表示结束的值为5,即产生的列表为[0,1,2,3,4,5]。

·step:表示列表中元素的增幅,该参数可以省略,省略则表示元素默认步长为1,如range(0,6)相当于range(0,6,1)。

range()函数一般与for循环搭配使用,以控制for循环中代码段的执行次数。例如,对上面字符串、列表的遍历也可以由range()函数来控制,range()函数的结束值为字符串、列表的长度。相应的代码修改如下。

字符串遍历代码:

列表遍历代码:

for与range()函数的搭配在Python中应用非常频繁,一般非元素遍历而又明确循环次数的循环方式均可使用这种搭配。

【案例4-7】 计算1~100的累加之和。

案例分析:

要计算1~100的累加之和,可以使用循环语句,将1~100间的数字逐一取出来进行累加。可以使用for与range()的搭配,循环次数为100次,结束值为100。算法流程图如图4-8所示。

图4-8 1~100累加的算法流程图

程序代码如下:

运行结果:

【案例4-8】 打印出所有的水仙花数。所谓“水仙花数”是指一个3位数,其各位数字立方和等于其本身。例如,153是一个水仙花数,因为153=13+53+33

案例分析:

最小的3位数是100,最大的是999,需要在100~999的范围内逐一遍历,对每一个数字都取出它的百位、十位和个位,查看这3位数字的3次方之和是否与这个数字本身相等,如果相等,则输出。

如何取出一个3位数的百位、十位和个位?

方法一:个位可以直接通过用这个数对10取余获取,百位可通过用这个数对100整除获取,十位则需要先用这个数对10整除,再用整除的结果对10取余。

方法二:可以先将这个数值转换成字符串,用取子串的方式逐一取出对应位的数字,再将取出的数字转换为整型。

方法一的代码如下:

方法二的代码如下:

运行结果: