先来回顾一下上节课讲过的while语句的循环方式以及它的实际应用。
第十六节:while语句习题课
下面就跟着老师一起来走进循环的“高阶”版本吧~
循环嵌套
按照数学老师的惯例,讲授新知识之前先来看一道例题:
在控制台中打印如下图形:
打印一个5*5的星星阵。有同学就会想到,写五个输出语句就好啦:
print('* * * * *')
print('* * * * *')
print('* * * * *')
print('* * * * *')
print('* * * * *')
执行结果如下:
那如果老师要你打印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=''
使得这个换行的功能用空格换掉,再来看一下效果:
结果发现它全都变成了横向的,这是因为内层的循环再执行一次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以内所有的质数
下节课来公布答案。
第十八节:打印九九乘法表