首先从输出最基本的图形开始:输出一个'?'。print('?')如何循环输出五个'?'?#代码块1i=1whilei<=5:print('?')i+=1#实际输出结果如下:?????如果我们要输出不换行,应该怎么调整呢?这时候我们可以想到print()的默认参数:print(self,*args,sep='',end='\n',file=None)知识点:如果要输出多个参数并行的单个语句,可以更改默认参数sep='';如果想并行输出多条语句,可以修改默认参数end='\n'。在代码块1的循环中,print('?')实际上执行了多次,实际上是多条语句,所以需要修改end='\n'。'\n'表示换行,那我们只需要将它改成空格即可:''。(注:这里的引号其实是一个空格)我们再执行一下上面修改后的代码:#codeblock2i=1whilei<=5:print('?',end='')#outputiwithoutlinebreak+=1#此时实际输出的是我们想要的结果:?????基于以上操作,如果要求输出一个由'?'组成的正方形,如何实现呢?这时候我们可以想一想,把代码块2看成一个整体,并行输出5个'?',那么我们只需要将代码块2重复五次,是不是就可以实现呢?因此,我们需要在此基础上对代码块2增加一个外层循环结构。为了方便理解,我们先写一个循环结构:#代码块3j=1whilej<=5:print('*')j+=1#这里的实现是打印五次'*':*****和打印'?'是一样的结构吗?但这是分支输出。这时候我们只需要将代码块2嵌入到上面的代码块3中,就可以输出一个由'?'组成的正方形。如何嵌入它?只需替换上面的print()内容:#codeblock4j=1whilej<=5:#embed*codeblock2*intoi=1whilei<=5:print('?',end='')i+=1j+=1#但是此时,它不输出由'?'`?????????????????????????为什么?让我们仔细看看。一共输出了25个'?',而且都是在同一行输出,也就是说代码块4实际上只是实现了代码块2在同一行的五遍输出。所以,我们只需要将行更改为换行,对吧?但是我们把代码块2看成一个整体,如果没有可以直接修改的print()语句呢?我们可以想一想,内循环每次执行输出后都没有换行,是否可以让它在每次执行输出后强制换行呢?所以按照程序自上而下运行的逻辑,每次执行内循环输出后打印一个换行符就可以了,也就是加一个print()语句。#代码块5j=1whilej<=5:i=1whilei<=5:print('?',end='')i+=1print()#添加print()强制换行j+=1#This????????????????????????至此我们回顾一下整体逻辑:1.内循环控制每一行的输出;i+=1增加数量;2、外层循环控制每一列的输出;数量增加j+=1;3、当外层循环j=1时,内层循环依次输出,当内层循环条件不满足时,跳出内层循环Loop,j执行+1;当外循环j=2时,内循环顺序输出,当不满足内循环条件时,跳出内循环,j执行+1;以此类推,直到外层循环不满足条件,整个循环结束。下面通过调试器工具(登陆:https://pythontutor.com/pytho...)来看一下代码实现的具体步骤:https://www.bilibili.com/video...我们也可以采取看图模型:通过上面的操作,相信你输出一个正方形应该很容易了。那我们再进一步想一下,这个三角形应该怎么输出呢?我们从上图可以看出,当j=i时,可以从左上角到右下角连成一条对角线,可以把正方形分成两个三角形。在分割线的左下部分,j>i在每个圆圈中;在右上部分,j
