天天看点

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

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

循环嵌套

按照数学老师的惯例,讲授新知识之前先来看一道例题:

在控制台中打印如下图形:

打印一个5*5的星星阵。有同学就会想到,写五个输出语句就好啦:

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

执行结果如下:

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

那如果老师要你打印

100*5

1000*5

8848*5

呢。。

此时就可以利用咱们上节课讲过的循环语句来实现:

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

执行结果也是一样的。而且只需要修改条件表达式

i<5

中的数字,就可以实现打印

100*5

1000*5

8848*5

。。等等这些,那老师又提要求了,我现在想打印10列,我觉得5列太少了,你的第一想法是修改print语句里面的

*

数量就可以实现,那么同样的问题来了,我想打印

8848*8848

怎么办呢?

用同样的思路:同样对列使用循环,这就形成了一个循环的嵌套。具体怎么嵌套,跟着老师往下看:

首先在里面加一个内层循环,控制列数:

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

结果会发现执行结果变成了:

这是为什么呢?在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           

执行结果为:

这就是咱们想要的结果了。

综上:循环嵌套时,外层循环执行一次,内层循环就执行了一圈(在这里就是5次)。内层循环控制图形的宽度,外层循环控制图形的高度。

此时,我的需求又要变化啦,我不想打印“矩形”了,我想打印一个“三角形”。

那该怎么来实现呢?

刚刚打印“矩形”的时候老师说了,外层循环控制图形的高度,内层循环控制图形的宽度,现在图形的高度依然是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           

这样美丽的“三角形”就绘制出来啦~

大家在理解一下这个逻辑:外层循环执行一次,内层循环就执行一圈,外层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进阶文章点击此处获取