
7-3 进阶的for循环应用
7-3-1 嵌套for循环
一个循环内有另一个循环,我们称这是嵌套循环。如果外循环要执行n次,内循环要执行m次,则整个循环执行的次数是n*m次,设计这类循环时要特别注意下列事项:
外层循环的索引值与内层循环的索引值必须不同。
● 程序代码的内缩一定要小心。
● 下列是嵌套循环基本语法:
for 变量 in 对象: # 外层for循环 … for 变量 in 对象:# 内层for循环 …
下列将用实例说明。
程序实例ch7_19.py:打印9*9的乘法表。

执行结果

上述程序第5行,%-3d主要是供result使用,表示每一个输出预留3格,同时靠左输出。同一行End=“”则是设定,输出完空一格,下次输出不换行输出。当内层循环执行完一次,则执行第6行,这是外层循环叙述,主要是设定下次换行输出,相当于下次再执行内层循环时换行输出。
程序实例ch7_20.py:绘制直角三角形。

执行结果

7-3-2 强制离开for循环-break指令
在设计for循环时,如果期待某些条件发生时可以离开循环,可以在循环内执行break指令,即可立即离开循环,这个指令通常是和if语句配合使用。下列是常用的语法格式:

下列是流程图,其中在for循环内的if条件判断,也许前方有程序代码区块1、if条件内有程序代码区块2或是后方有程序代码区块3,只要if条件判断是True,则执行if条件内的程序代码区块2后,可立即离开循环。

例如,设计一个比赛,可以将参加比赛者的成绩列在列表内,如果想列出前20名参加决赛,可以设定for循环当选取20名后,即离开循环,此时就可以使用break功能。
程序实例ch7_21.py:输出一系列数字元素,当数字为5时,循环将终止执行。

执行结果

上述在第一个列表的测试中(第3至6行),当碰到列表元素是5时,循环将终止,所以只有列出“1, 2, 3, 4,”元素。在第二个列表的测试中(第9至12行),当碰到列表元素是5时,循环将终止,可是这个列表元素中没有5,所以整个循环可以正常执行到结束。
程序实例ch7_22.py:列出球员名称,列出多少个球员则是由屏幕输入,这个程序同时设定,如果屏幕输入的人数大于列表的球员数时,自动将所输入的人数降为列表的球员数。

执行结果

7-3-3 for循环暂时停止不往下执行–continue指令
在设计for循环时,如果期待某些条件发生时可以不往下执行循环内容,此时可以用continue指令,这个指令通常是和if语句配合使用。下列是常用的语法格式:

下列是流程图,相当于如果发生if条件判断是True时,则不执行程序代码区块3内容。

程序实例ch7_23.py:有一个列表scores纪录James的比赛得分,设计一个程序可以列出James有多少场次得分大于或等于30分。

执行结果

程序实例ch7_24.py:有一个列表players,这个列表的元素也是列表,包含球员名字和身高数据,列出所有身高是200(含)公分以上的球员数据。

执行结果

对于上述for循环而言,每次执行第7行时,player的内容是players的一个元素,而这个元素是一个列表,例如:第一次执行时player内容是如下:
[‘James', 202]
执行第8行时,player[1]的值是202。由于if判断的结果是False,所以会执行第10行的print(player)指令,其他可依次类推。
7-3-4 for … else循环
在设计for循环时,如果期待所有的if叙述条件是False时,在最后一次循环后,可以执行特定程序区块指令,可使用这个叙述,这个指令通常是和if和break语句配合使用。下列是常用的语法格式:

下列是流程图,如果最后一次循环if条件表达式仍是False时,才会执行程序代码区块4。

其实这个语法很适合传统数学中测试某一个数字n是否是质数,质数的条件是:
● 2是质数。
● n不可被2至n-1的数字整除。
程序实例ch7_25.py:质数测试的程序,如果所输入的数字是质数则列出是质数,否则列出不是质数。

执行结果
