
7-1 基本for循环
for循环可以让程序将整个对象内的元素遍历(也可以称迭代),在遍历期间,同时可以纪录或输出每次遍历的状态或称轨迹。for循环基本语法格式如下:
for var in 可迭代对象: # 可迭代对象英文是iterable object 程序代码区块
可迭代对象(iterable object)可以是列表、元组、字典与集合或range( ),在信息科学中迭代(iteration)可以解释为重复执行,上述语法可以解释为将可迭代对象的元素当作var,重复执行,直到每个元素皆被执行一次,整个循环才会停止。
设计上述程序代码时,必须要留意缩排的问题,可以参考if叙述观念。由于这里笔者介绍列表(list),所以读者可以想象这个可迭代对象(iterable)是列表(list),第8章笔者会讲解元组(Tuple),第9章会讲解字典(Dict),第10章会讲解集合(Set)。另外,上述for循环的可迭代对象也常是range( )函数产生的可迭代对象,将在7-2节说明。
7-1-1 for循环基本运作
例如,一个NBA球队有5位球员,分别是Curry、Jordan、James、Durant、Obama,现在想列出这5位球员,那么使用for循环执行这个工作就很适合。
程序实例ch7_3.py:列出球员名称。

执行结果

上述程序执行的观念是,当第一次执行下列语句时:
for player in players:
player的内容是‘Curry’,然后执行print(player),所以会印出‘Curry’。由于列表players内还有其他的元素尚未执行,所以会执行第二次,当执行第二次下列语句时:
for player in players:
player的内容是‘Jordan’,然后执行print(player),所以会印出‘Jordan’。由于列表players内还有其他的元素尚未执行,所以会执行第三次,第四次,当执行第五次下列语句时:
for player in players:
player的内容是‘Obama’,然后执行print(player),所以会印出‘Obama’。第六次要执行for循环时,由于列表players内所有元素已经执行,所以这个循环就算执行结束。下列是循环的流程示意图。

7-1-2 如果程序代码区块只有一行
使用for循环时,如果程序代码区块只有一行,它的语法格式可以用下列方式表达:
for var in 可迭代对象:程序代码区块
程序实例ch7_4.py:重新设计ch7_3.py。

执行结果 与ch7_3.py相同。
7-1-3 有多行的程序代码区块
如果for循环的程序代码区块有多行程序时,要留意这些语句同时需要做缩排处理。它的语法格式可以用下列方式表达:
for var in 可迭代对象: 程序代码 程序代码 ……
程序实例ch7_5.py:这个程序在设计时,首先笔者将列表的元素英文名字全部改成小写,然后for循环的程序代码区块有2行,这2行(第4和5行)皆需内缩处理,player.title( )的title( )方法可以处理第一个字母以大写显示。

执行结果

7-1-4 将for循环应用在列表区间元素
Python也允许将for循环应用在6-1-2节和6-1-3节所截取的区间列表元素上。
程序实例ch7_6.py:列出列表前3位和后3位的球员名称。

执行结果

这个观念其实很有用,例如,你设计一个学习网站,想要每天列出前3名学生基本数据同时表扬,可以将每个人的学习成果放在列表内,同时用降幂排序方式处理,最后可用本节观念列出前3名学生资料。
注:升幂是指由小到大排列。降幂是指由大到小排列。
7-1-5 将for循环应用在数据类别的判断
程序实例ch7_7.py:有一个files列表内含一系列文件名,请将“.py”的Python程序另外建立到py列表,然后打印。

执行结果

程序实例ch7_8.py:有一个列表names,元素内容是姓名,请将姓洪的成员建立在lastname列表内,然后打印。

执行结果

7-1-6 删除列表内所有元素
程序实例ch7_9.py:Python没有提供删除整个列表元素的方法,不过我们可以使用for循环完成此工作。

执行结果
