![每个人的Python:数学、算法和游戏编程训练营](https://wfqqreader-1252317822.image.myqcloud.com/cover/137/44510137/b_44510137.jpg)
2.2.2 小试牛刀——打印简单图形
在2.2.1小节中,我们使用循环的技巧打印了各种形状的乘法口诀表。本小节进一步思考和尝试如何打印出更多有趣的图形。
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-P46_28470.jpg?sign=1738892557-Lho0D9DjOfAY3iMEeT2uUFUcpho7VKEG-0-2c260b1b7236e093be239a3216b6e8a3)
图2-5 等腰三角形形状
三角形是生活中常见的几何形状,我们可以尝试使用Python编程输出一个等腰三角形形状,效果如图2-5所示。
图2-5中的形状看上去简单,其实通过程序打印出来并不容易。首先,我们先分析图2-5所示的图形,该三角形有6层,最后一层是满的,由11个星号排列组成,假设层数为f,实际上每一层出现的星号个数为(f–1)*2 + 1,即2f – 1个。我们再分析一下星号的布局情况,要想使得最终打印的图形为等腰三角形,需要使用空格来调整布局,最后一行没有空格,从最后一行依次向上,空格数依次递增,即行数与空格数的关系为:
每行的空格数=最终行数–(当前层数–1)
基于上面的分析,编写代码如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T46_28473.jpg?sign=1738892557-Qq49fcQLGYjTS5o3hYKSjnUzcb4ki93a-0-0a3877a9b84b54bf09cf6e0ecf91e597)
上面的代码定义了一个函数,通过传入行数作为参数,输出等腰三角形,例如传入参数10时,将打印共10行布局的等腰三角形,如图2-6所示。
对上面的代码进行简单的修改,即可将打印的等腰三角形变成倒三角形。示例代码如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T47_28476.jpg?sign=1738892557-Wqm3sibCFoUl4ufWRMyKBubPt16hGO29-0-a2657e70807d3f28e17a990923e3d8c3)
运行效果如图2-7所示。
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-P47_12919.jpg?sign=1738892557-4P5XkR140vzgKTN9RBq8AVxzByAhJXXu-0-b55fb8c1dbdbf65d858389d8c18a5387)
图2-6 打印等腰三角形
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-P47_12920.jpg?sign=1738892557-1UCc32SnFzc7n27OMs19fxmI75ta7sJY-0-2c699be363ade2dd576689b76475c037)
图2-7 打印倒三角形
完成了三角形与倒三角形的打印,通过这两个函数的组合调用将非常方便地实现菱形图形的打印,示例如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T47_28480.jpg?sign=1738892557-bAsuqKuSK0IggjMmOZ1K76sl8zZMAQVx-0-110d00afc71ed5dba06e505b44f5b23d)
运行程序,效果如图2-8所示。
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-P48_12954.jpg?sign=1738892557-eyG5I08Oh7lK0pbrfrwX4NKTIoxMzWjf-0-37503fbe01e00d6fdd3f55a32b4661b8)
图2-8 打印菱形图形
可以发现,如果我们需要打印出复杂的图形,其实可以先将复杂图形进行拆解,将其拆解为多个简单图形的组合,之后分别编写简单图形的打印函数,组合调用函数即可。例如,编写一个打印行列数矩形的函数,示例如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T48_28482.jpg?sign=1738892557-TEyLzXZg11DQA8LyYHWouTvYx6yfmrVY-0-4940b38b4b60d3de4ceb644164d41580)
再略微修改三角形打印函数,使其指定三角形的绘制位置,示例如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T48_28484.jpg?sign=1738892557-ftLNhO9mvEo1Yop4bKyklSiBbmXgjtPC-0-729c03d4bfc407fc6100596f7ad62136)
通过组合调用上面的函数可以打印出一颗圣诞树形状的图形,示例如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T49_28487.jpg?sign=1738892557-3Gx8SBzYXOnzM34Vk3KuzQx4nx48SRqP-0-584331a0d3823a45992ab7d6e7cc139f)
运行代码,效果如图2-9所示。
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-P49_13016.jpg?sign=1738892557-oN1CzeVZ4dktG8gknNBzZODdaRtBsdni-0-fc97127666c5e0a5fa18fc39b320ad77)
图2-9 打印圣诞树形状的图形
发挥一下你的想象力与创造力,尝试使用Python打印出更多有趣的图形。