1
Python编程从入门到实践
1.8.3.5 4.3.5 循环结构的嵌套
4.3.5 循环结构的嵌套

循环的嵌套是指在一个循环体内包含了另一个完整的循环结构。while循环和for循环不仅可以自身嵌套,还可以互相嵌套。

【例4.23】编程输出以下形式的乘法九九表。

1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9

2*1=2 2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18

9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81

问题分析:首先观察第一行乘法表的变化规律。被乘数为1保持不变,而乘数从1变化到9,每次增量为1,因此,构造如下循环即可实现,一行乘法表的输出:

再观察第二行乘法表的变化规律。与第一行唯一不同的是被乘数为2,而处理过程完全一样,因此,只需将被乘数改为2,对上述循环再执行一次即可。同理,第三行至第九行只需让被乘数从3变化到9,对上述循环再执行7次。因此,在上述循环的外面再加上一个循环,即构成双重循环,就可得到所要求的乘法九九表。

算法的流程图如图4-35所示。

图4-35 九九乘法表流程图

程序如下:

运行结果如图4-36所示。

图4-36 运行结果

【例4.24】计算s=1!+2!+3!+…+n!,n由键盘输入。

分析:设整型变量sum用来存放n个数的阶乘的累加之和。

①n的阶乘可以由下面的while循环来实现。

②n个数之和可以由下面的for循环来实现。

把二者结合在一起,便可实现本题的要求,程序如下:

运行结果如图4-37所示。

图4-37 运行结果

【例4.25】某小组有3个学生,每个学生考4门课。要求分别统计出每个学生各门课的平均成绩。

问题分析:

首先考虑求一个学生各门课的平均成绩。设置循环控制变量i控制课程数,其变化从1到4,每次增量为1。对于每个学生,每执行一次内循环,就输入一门课程的成绩,并且累加到总分sum中。内循环执行4次以后,退出内循环,就可以计算和打印该学生的平均分,从而结束该学生的处理。

每个学生的处理过程是一样的,因此,只需对上述流程重复执行3遍(即形成双重循环),每遍输入不同学生的各课成绩,即可求得3个学生的各门课的平均成绩。设置外循环控制变量j控制学生人数,其变化从1到3,每次增量为1。

程序如下:

运行结果如图4-38所示。

程序说明:

①程序中的变量sum作为累加单元,在累加一个学生的总成绩之前,一定要初始化为0;否则,会将前面学生的总成绩全部加到下一个学生的成绩上。此外,sum初始化语句的位置也很关键,既不能放在内循环的里面,也不能放在外循环的外面。

图4-38 运行结果

②使用循环的嵌套结构时,要注意:外层循环应“完全包含”内层循环,不能发生交叉;嵌套的循环控制变量一般不应同名,以免造成混乱。

例如,以下程序中内外循环控制变量同名,显然会造成循环混乱: