循环结构A中,嵌入了另外的循环结构B作为循环结构A的循环体,这样的循环结构被称为嵌套循环

嵌套循环结构演示图

for...in...嵌套循环做个简单的演示(三行四列打印输入*

for _ in range(3):
    for _ in range(4):
        print('*', end='\t')
    print()

运行结果:(运行结果用-代表空格,以便观察)

  • *---*---*---*---
  • *---*---*---*---
  • *---*---*---*---

分解:

第一行:无需访问自定义变量,用_下划线代替,选题要求是三行,用range()函数控制循环次数3

第二行:嵌入新的for...in...循环作为第一行for...in...循环的循环体,无需访问自定义变量,用_下划线代替,选题要求是四列,用range()函数控制循环次数4

第三行:循环打印输出*4次,默认情况下,print()函数输出后末尾会默认添加换行符,这样一行输出一个*的话,就不符合我们的选题了,所以在print()函数括号内末尾加上end='',可以把print()函数默认添加的换行符替换成一个空字符串,这样就可以实现不换行输出了,也就是两个*之间会相隔一个空字符串,因为是空字符串,所以没有间隔,但是这样****紧紧挨着不美观,所以在空字符串内加入一个转义符\t,前面学过,转义符\t是一组四个空格的制表符,也就是代表四个空格,这样两个*之间就会有空格了,但为什么上面相隔的是三个空格,而不是四个空格呢,这是因为*占据了一个空格的位置(详细解读可以看之前的转义符笔记),这个空字符串里面可以加所有转义符\n \t \r \b,甚至可以直接添加空格,想加几个加几个,也可以添加字符,具体效果可以参考转义符笔记和实际测试看看(部分转义符需要一次多输出几个字符才能看出效果,例如:\r \b,一个*是测不出具体效果的)

第四行:这个空的print()函数属于第一行for...in...循环的循环体,所以要第二行for...in...循环结束后,才会运行,也就是一行四列的*输出完毕后再运行,这时候我们需要换行,那么为什么写一个空的print()函数呢,刚说过,print()函数会默认在末尾添加一个换行符,这个空的print()函数就代表只输出了一个换行符,这样就完成了换行,然后回到第一行for...in...循环继续第二次第三次循环,输出二行四列三行四列的*

第二个演示(打印九九乘法表)

九九乘法表

我们找找九九乘法表的规律,先用*代替公式打印出来

第一行一个公式,第二行二个公式,第三行三个公式,依次到第九行九个公式,那么我们知道了,第N行要有N个公式,每输出一行就要增加一个公式,我们需要做到的是,嵌套循环的内层循环每次运行结束后,下次重新开始之前要增加一次循环次数,下面看演示

for a in range(1, 10):
    for b in range(1, a + 1):
        print('*', end='\t')
    print()

运行结果:(运行结果用-代表空格,以便观察)

  • *---
  • *---*---
  • *---*---*---
  • *---*---*---*---
  • *---*---*---*---*---
  • *---*---*---*---*---*---
  • *---*---*---*---*---*---*---
  • *---*---*---*---*---*---*---*---
  • *---*---*---*---*---*---*---*---*---

分解:(第一个选题是详解,会讲的细一些,下面的分解我们直接把第一行的for...in...循环称为外层循环,第二行的for...in...循环称为内层循环)

第一行:自定义变量a取值范围range(1, 10)代表整数1 - 9

第二行:自定义变量b取值范围range(1, a + 1),假设外层循环是第一次循环,变量a的值为1,那么变量b的取值范围为range(1, 1 + 1)等于range(1, 2)代表整数1,此时内层循环的循环次数为一次,对应了第一行一个公式这个条件,然后外层循环进入第二次循环,变量a的值为2,那么变量b的取值范围为range(1, 2 + 1)等于range(1, 3)代表整数1 - 2,此时内层循环的循环次数为二次,对应了第二行二个公式这个条件,直到外层循环进入第九次循环,变量a的值为9,那么变量b的取值范围为range(1, 9 + 1)等于range(1, 10)代表整数1 - 9,此时内层循环的循环次数为九次,对应了第九行九个公式这个条件,再然后变量a无值可取,整个嵌套循环结构结束运行,这样基本符合了九九乘法表的阶梯式模型

第三行:打印输出*,内层循环当前循环次数为N次,就输出N*print()函数括号内末尾加上end=''实现不换行输出

第四行:当前内层循环结束后,同为外层循环的循环体,空函数print()用来输出换行符

上面的代码只是实现了九九乘法表的阶梯式模型,现在要用正确的公式代替*

for a in range(1, 10):
    for b in range(1, a + 1):
        print(b, '*', a, '=', b * a, end='\t')
    print()

运行结果:(运行结果用-代表空格,以便观察)

  • 1 * 1 = 1---
  • 1 * 2 = 2---2 * 2 = 4---
  • 1 * 3 = 3---2 * 3 = 6---3 * 3 = 9---
  • 1 * 4 = 4---2 * 4 = 8---3 * 4 = 12---4 * 4 = 16---
  • 1 * 5 = 5---2 * 5 = 10---3 * 5 = 15---4 * 5 = 20---5 * 5 = 25---
  • 1 * 6 = 6---2 * 6 = 12---3 * 6 = 18---4 * 6 = 24---5 * 6 = 30---6 * 6 = 36---
  • 1 * 7 = 7---2 * 7 = 14---3 * 7 = 21---4 * 7 = 28---5 * 7 = 35---6 * 7 = 42---7 * 7 = 49---
  • 1 * 8 = 8---2 * 8 = 16---3 * 8 = 24---4 * 8 = 32---5 * 8 = 40---6 * 8 = 48---7 * 8 = 56---8 * 8 = 64---
  • 1 * 9 = 9---2 * 9 = 18---3 * 9 = 27---4 * 9 = 36---5 * 9 = 45---6 * 9 = 54---7 * 9 = 63---8 * 9 = 72---9 * 9 = 81---

为了得到完整的公式,我们需要把当前变量a和变量b的值原原本本的输出作为两个运算数,*=作为运算符以字符串的形式输出,最后输出当前变量a和变量b的值相乘得到的值作为运算结果,来形成一个完整的公式(例如:外层循环第三次循环,变量a的值为3,内层循环第二次循环,变量b的值为2,套入函数print(b, '*', a, '=', b * a)等于print(2, '*', 3, '=', 2 * 3),除了后面的表达式2 * 3会被运算后输出,前面的都会被原原本本的输出,这样就得到了一个完整的公式2 * 3 = 6),为什么变量b要放前面呢,作为内层循环的自定义变量,外层循环每次重新运行后,变量b都要重新从1开始按顺序取值,这样九九乘法表的整体都是按从小(左上)到大(右下)的顺序来的,更加美观

最后修改:2021 年 06 月 30 日 06 : 48 PM