循环嵌套打印三角形星星阵 | Python从入门到开发:入门篇之十七

先来回顾一下上节课讲过的while语句的循环方式以及它的实际应用。
第十六节:while语句习题课
下面就跟着老师一起来走进循环的“高阶”版本吧~

循环嵌套

按照数学老师的惯例,讲授新知识之前先来看一道例题:
在控制台中打印如下图形:
循环嵌套打印三角形星星阵 | Python从入门到开发:入门篇之十七
打印一个5*5的星星阵。有同学就会想到,写五个输出语句就好啦:

print('* * * * *')
print('* * * * *')
print('* * * * *')
print('* * * * *')
print('* * * * *')

执行结果如下:
循环嵌套打印三角形星星阵 | Python从入门到开发:入门篇之十七
那如果老师要你打印100*51000*58848*5呢。。
此时就可以利用咱们上节课讲过的循环语句来实现:

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

执行结果也是一样的。而且只需要修改条件表达式i<5中的数字,就可以实现打印100*51000*58848*5。。等等这些,那老师又提要求了,我现在想打印10列,我觉得5列太少了,你的第一想法是修改print语句里面的* 数量就可以实现,那么同样的问题来了,我想打印8848*8848怎么办呢?
用同样的思路:同样对列使用循环,这就形成了一个循环的嵌套。具体怎么嵌套,跟着老师往下看:
首先在里面加一个内层循环,控制列数:

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

结果会发现执行结果变成了:
循环嵌套打印三角形星星阵 | Python从入门到开发:入门篇之十七
这是为什么呢?在python中,print函数是默认有一个n来控制换行的,也就是说每打印一次*之后就执行了一次换行,那这显然是不行的,我们是想让他打印五次再换行嘛,就需要在后面加一个end=''使得这个换行的功能用空格换掉,再来看一下效果:
循环嵌套打印三角形星星阵 | Python从入门到开发:入门篇之十七
结果发现它全都变成了横向的,这是因为内层的循环再执行一次5列之后还是执行了end=''所以就没有进行换行操作,此时就需要在内层循环结束加一个空的print语句,让其换行即可。

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

执行结果为:
循环嵌套打印三角形星星阵 | Python从入门到开发:入门篇之十七
这就是咱们想要的结果了。
综上:循环嵌套时,外层循环执行一次,内层循环就执行了一圈(在这里就是5次)。内层循环控制图形的宽度,外层循环控制图形的高度。
此时,我的需求又要变化啦,我不想打印“矩形”了,我想打印一个“三角形”。
循环嵌套打印三角形星星阵 | Python从入门到开发:入门篇之十七
那该怎么来实现呢?
刚刚打印“矩形”的时候老师说了,外层循环控制图形的高度,内层循环控制图形的宽度,现在图形的高度依然是5,所以外层循环是不变的,那么内层循环该怎么变化呢?
如果j的值是固定的,那么就是宽度是固定的,但是这个“三角形”的宽度是变化的,那咱们来分析一下,
当i执行第一次i=0,图形宽度为1,那么j就是小于1;
当i执行第二次i=1,图形宽度为2,j就是小于2;
当i执行第三次i=2,图形宽度为3,j就是小于3。。。
有同学就发现了,j的值是根据i来变化的,j就是小于i+1的值。程序如下:

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

执行结果为:
循环嵌套打印三角形星星阵 | Python从入门到开发:入门篇之十七
这样美丽的“三角形”就绘制出来啦~
大家在理解一下这个逻辑:外层循环执行一次,内层循环就执行一圈,外层i的值在变化,就控制了内层j的值。也就控制了图形的宽度。
练习1
打印99乘法表

1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
...9*9=81

练习2
求100以内所有的质数
下节课来公布答案。
第十八节:打印九九乘法表

视频学习:阿里云大学之Python进阶必看

配套Python进阶文章点击此处获取

上一篇:Python之exec()/compile()方法使用


下一篇:Python编程:qrcode库生成二维码