4.3.5 循环嵌套

4.3.5 循环嵌套

循环嵌套是指在一个循环体内完整地包含一个或者几个循环结构,也称为多重循环。Python中的两类循环while循环和for循环都可以相互嵌套,循环的嵌套也可以是多层的。

循环嵌套可以使复杂的问题结构化,把一个功能的实现拆分成一个一个更小的功能,然后再实现,在此实现的过程中必须要注意结构上的逻辑性和该逻辑的正确性,要保证每一个小的功能都能够完全正确,最终实现一个完整的循环。循环嵌套常用于解决矩阵计算、报表打印等问题。

【案例4-14】 使用嵌套语句输出图4-11所示的图形。

图4-11 程序效果图

案例分析:

在控制输出过程中,循环嵌套的执行原理是:外层循环表示行数;内层循环表示列数;外层变量换到内层,达到递增或递减效果。

图4-11(a)中,符号左对齐输出,每一行符号个数都是递增,第一行是1个,…,第i行是i个,则可知符号个数等于行号。实现代码如下:

图4-11(b)中,符号左对齐输出,每一行符号个数都是递减,一共5行,第一行是5个,第i行是6-i个,则可知符号个数由总行数加1减行号得到。实现代码如下:

图4-11(c)中,符号右对齐输出,每一行的符号前面都需要输出空格来控制右对齐。每一行的空格数都是递减的,第1行4个空格,第i行5-i个空格,即每一行的空格数都是总行数减去行号。每一行的符号都是递增的,第一行是1个,…,第n行是n个,即可知符号个数等于行号。实现代码如下:

图4-11(d)中,符号右对齐输出,每一行的符号前面都需要输出空格来控制右对齐。总行数为5,每一行的空格数都是递增的,第1行0个空格,第i行i-1个空格,即每一行的空格数都是行号减1。每一行的符号个数都是递减的,第一行是5个,第i行是6-i个,即可知符号个数等于总行数加1减去行号。实现代码如下:

图4-11(e)中,符号居中输出,每一行的符号前面都需要输出空格来控制居中对齐。总行数为5,每一行的空格数量都是递减的,第1行的空格数为4个,即5-1,第i行的空格数为5-i,即空格数等于总行数减去行号。每一行的符号个数都是递增的,第1行是1个,第2行是3个,第i行是2i-1个,则可知符号个数等于行号乘2减1。实现代码如下:

图4-11(f)中,符号居中输出,每一行的符号前面都需要输出空格来控制居中对齐。总行数为5,每一行的空格数量都是递增的,第1行的空格数为0个,第2行的空格数为1个,第i行的空格数为i-1个,即空格数等于行号减去1。每一行的符号个数都是递减的,第1行是9个,第2行是7个,第i行是2×(5-i)+1个,则可知符号个数等于总行数减行号后乘2再加1。实现代码如下:

【案例4-15】 使用嵌套语句输出九九乘法表。

案例分析:

由外层循环控制行,同时行号即被乘数,用内层循环控制列,同时列号即乘数。每一行的输出内容为:行号*列号=积。列号的最小值为1,最大值为行号。实现代码如下:

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

图4-12 九九乘法表