Python学习之路8—while循环嵌套

本章节的内容有点多,我在前面列个提纲:

今天要学习的案例是:

案例一:正方形的星星

*****
*****
*****
*****
*****

案例二:三角形的星星

*
**
***
****
*****

案例三:九九乘法表

python循环嵌套在屏幕上打印如下图形 python循环嵌套有趣案例_九九乘法表


循环嵌套,就是当前的这个循环,里面再套一个循环。可以理解为“套娃”。

while 条件1:
    条件1执行的代码
    ......
    while 条件2:
        条件2执行的代码
        ......
print(结果)

先来上个案例来认识下。

案例一:打印星号(正方形)

需求是:实现这样一个正方形的星星出来

*****
*****
*****
*****
*****

一开始看到这样的题,有些不知所措。根据上面的学习,自己还是先着手写一下第一行。第一行要展示五个一样的星星。

定义下: i = 星星;

i = 0
while i <5:
    print("*")
    i +=1

最后输出的却是:

*
*
*
*
*

我这输出结果并不是一行五个星星,可见是哪里错了。

如果当真是简单的实现一行展示五个星星,我可以直接print("*****"),这样出来的效果就是五个星星。但是后面还要学习九九乘法表,星星代替变化的数字,就不合适了。

回归正传,print("")的时候,print是自带换行的,即print("",end="\n")。

那么我们取消换行即可,即print("*",end="")。

此刻输出的已是“*****”

第一行搞定了,把第一行重复,重复五行就行。

定义:j = 行数;

j = 0
while j < 5:
    i = 0
    while i < 5:
        print("*", end="")
        i += 1
    j +=1

输出的是:

************************************

我觉得这个代码书写没毛病啊,但是为啥又变成一行了。

前面讲过print自带换行,所以 i 这个循环,我们禁止换行了。这个时候 j 这个循环又需要换行了。我改 i 循环没用,因为那是 i 的循环。所以我要在 j 的循环里加上换行。

j = 0
while j < 5:
    i = 0
    while i < 5:
        # print("*",end="\n"),取消换行
        print("*", end="")
        i += 1
    #一行星星结束,换行展示下一行
    print("*", end="\n")
    j +=1

最终看下输出的结果:

*******
*******
*******
*******
*******

完美,perfect!

案例二:打印星号(三角形)

需求是:

*
**
***
****
*****

这是一个三角形,且每一行的星星数量跟行数是一样的。

我们回忆下正方形星星的代码:

j = 0
while j < 5:
    i = 0
    while i < 5:
        print("*", end="")
        i += 1
    print("*", end="\n")
    j +=1

当时定义的是 i = 星星;而 j = 行数。这样看起来就感觉简单了许多, i 就不用去小于5了,直接小于 j 就行了。运行看下,成功。

*
**
***
****
*****

案例三:九九乘法表

学习了上面的循环嵌套,再来看九九乘法表,思路是不是清晰多了。

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

首先,还是分析需求:

  • 1、打印一个表达式:a * b = a*b
  • 2、一行打印多个表达式,不换行。一行表达式的个数和行号数相等。
  • 3、打印多行表达式,换行。

先来打印一个表达式,

i = 1
while i <= 9:
    print(f"a * b = a*b")
    i += 1

我们可见,最终的表达式重复了9次.

a * b = a*b
a * b = a*b
a * b = a*b
a * b = a*b
a * b = a*b
a * b = a*b
a * b = a*b
a * b = a*b
a * b = a*b

第二步,一行打印多个表达式,不换行。一行表达式的个数和行号数相等

j = 1
while j <= 9:
    i = 1
    while i <= 9:
        print(f"{i} * {j} = {i}*{j}",end="")
        i += 1
    j += 1

输出的是:

1 * 1 = 11 * 2 = 22 * 2 = 41 * 3 = 32 * 3 = 63 * 3 = 91 * 4 = 42 * 4 = 83 * 4 = 124 * 4 = 161 * 5 = 52 * 5 = 103 * 5 = 154 * 5 = 205 * 5 = 251 * 6 = 62 * 6 = 123 * 6 = 184 * 6 = 245 * 6 = 306 * 6 = 361 * 7 = 72 * 7 = 143 * 7 = 214 * 7 = 285 * 7 = 356 * 7 = 427 * 7 = 491 * 8 = 82 * 8 = 163 * 8 = 244 * 8 = 325 * 8 = 406 * 8 = 487 * 8 = 568 * 8 = 641 * 9 = 92 * 9 = 183 * 9 = 274 * 9 = 365 * 9 = 456 * 9 = 547 * 9 = 638 * 9 = 729 * 9 = 81

这样打印出来的表达式都在一行里面,那么要对每行的表达式进行换行,就在 j += 1的前面加一个 print为空,这样就会进行换行,实践下:

j = 1
while j <= 9:
    i = 1
    while i <= j:
        print(f"{i} * {j} = {i*j}",end="")
        i += 1
    print()
    j += 1
1 * 1 = 1
1 * 2 = 22 * 2 = 4
1 * 3 = 32 * 3 = 63 * 3 = 9
1 * 4 = 42 * 4 = 83 * 4 = 124 * 4 = 16
1 * 5 = 52 * 5 = 103 * 5 = 154 * 5 = 205 * 5 = 25
1 * 6 = 62 * 6 = 123 * 6 = 184 * 6 = 245 * 6 = 306 * 6 = 36
1 * 7 = 72 * 7 = 143 * 7 = 214 * 7 = 285 * 7 = 356 * 7 = 427 * 7 = 49
1 * 8 = 82 * 8 = 163 * 8 = 244 * 8 = 325 * 8 = 406 * 8 = 487 * 8 = 568 * 8 = 64
1 * 9 = 92 * 9 = 183 * 9 = 274 * 9 = 365 * 9 = 456 * 9 = 547 * 9 = 638 * 9 = 729 * 9 = 81

这里还是没有完全对齐,每一个竖行之间还是要有空格的。这个时候,就要新增个基础知识点,那就还是,当end="\t",代表制表符,就会按照表格进行展示。

j = 1
while j <= 9:
    i = 1
    while i <= j:
        print(f"{i} * {j} = {i*j}",end="\t")
        i += 1
    print()
    j += 1
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

完成完成!!!

从没想过,直接打印出来了,太棒了。

从没想过自己还能这么写出来,果然没有程序员实现不了的需求,这句话不假。