![每个人的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=1739504254-Jv3DmvrXDgCxfQ90p9X2Q4W1i7XMBmJa-0-726e040f1d04e316899a1ab3405e6053)
图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=1739504254-ZPLRlsqqOGvJIpgSZnLIpB8R2j73E1Ty-0-8abb8466e668bc65b9a0b417600db4a1)
上面的代码定义了一个函数,通过传入行数作为参数,输出等腰三角形,例如传入参数10时,将打印共10行布局的等腰三角形,如图2-6所示。
对上面的代码进行简单的修改,即可将打印的等腰三角形变成倒三角形。示例代码如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T47_28476.jpg?sign=1739504254-Sow4Sulh6Q5pCMkNxWX4RwLcopH8BoVJ-0-403312a6815e0e5581afd59057291851)
运行效果如图2-7所示。
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-P47_12919.jpg?sign=1739504254-L3g8H8gYTtMu3FbwEPpzm58VLHMPfuIw-0-ff49b81b03e3ec302f0864368e6d0b90)
图2-6 打印等腰三角形
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-P47_12920.jpg?sign=1739504254-Q9WZkyk3AkQirjPP6nOlIVvmwpC8JO3X-0-b29e622dd93acf912d8ba4223a4f952e)
图2-7 打印倒三角形
完成了三角形与倒三角形的打印,通过这两个函数的组合调用将非常方便地实现菱形图形的打印,示例如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T47_28480.jpg?sign=1739504254-7O33LhrPlDBawhOm72hJ526tUq7JgM1l-0-f8ae3a5a9293c0bc973890165dece19c)
运行程序,效果如图2-8所示。
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-P48_12954.jpg?sign=1739504254-dgyhv9ksTCopWKyJw5BWNhZxq369amaK-0-d652948871caf10be0994efd9e95c2b2)
图2-8 打印菱形图形
可以发现,如果我们需要打印出复杂的图形,其实可以先将复杂图形进行拆解,将其拆解为多个简单图形的组合,之后分别编写简单图形的打印函数,组合调用函数即可。例如,编写一个打印行列数矩形的函数,示例如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T48_28482.jpg?sign=1739504254-J3NSCnkHAUW1g7Iy8YpCYN4k3tIiwy8i-0-dc2054e05f76a38acc09e43ed679b906)
再略微修改三角形打印函数,使其指定三角形的绘制位置,示例如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T48_28484.jpg?sign=1739504254-yNOLkFnwjcCh1Hm3sq0vOJoFfEJ1iSsR-0-a9d8f0bbc062be9800b9bf727f756e55)
通过组合调用上面的函数可以打印出一颗圣诞树形状的图形,示例如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T49_28487.jpg?sign=1739504254-7o3DK85Tr3VKQ2QezchkouWq1xGSV9Jl-0-0086244669f10af7e33a9450cd8a25a6)
运行代码,效果如图2-9所示。
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-P49_13016.jpg?sign=1739504254-Nmpezbq1pFqpGaBnoRvmdESOXZJ2gRWq-0-c5879349f600435add555868f65e7251)
图2-9 打印圣诞树形状的图形
发挥一下你的想象力与创造力,尝试使用Python打印出更多有趣的图形。