Python学习之路8—while循环嵌套
本章节的内容有点多,我在前面列个提纲:
今天要学习的案例是:
案例一:正方形的星星
*****
*****
*****
*****
*****
案例二:三角形的星星
*
**
***
****
*****
案例三:九九乘法表
循环嵌套,就是当前的这个循环,里面再套一个循环。可以理解为“套娃”。
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
完成完成!!!
从没想过,直接打印出来了,太棒了。
从没想过自己还能这么写出来,果然没有程序员实现不了的需求,这句话不假。