![每个人的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=1739041207-r2rTvjyjlAsbhBa1gUQwNBj5avcUfQNb-0-158940801b6903121bafab3e95abba53)
图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=1739041207-HL4cGWM9xoZrSUX4V8MS7Knk0ruoYELg-0-70c6847c6a5e1538f9bde1825c61f5cd)
上面的代码定义了一个函数,通过传入行数作为参数,输出等腰三角形,例如传入参数10时,将打印共10行布局的等腰三角形,如图2-6所示。
对上面的代码进行简单的修改,即可将打印的等腰三角形变成倒三角形。示例代码如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T47_28476.jpg?sign=1739041207-6O3nAgpObu7mq1ff6TTqi9HNuxaH0Txu-0-24310b8d82a73b9240d72c70182b2214)
运行效果如图2-7所示。
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-P47_12919.jpg?sign=1739041207-AGpGqbglzvEXrZl8xXLBflliOzBUPTnm-0-3acc945c5a725450d2b3110faae0d3c4)
图2-6 打印等腰三角形
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-P47_12920.jpg?sign=1739041207-Fgg1ZbS1erWxnRORAuPz196GMjA0fgwW-0-5d0f45399e22dbd7828c745006cd1946)
图2-7 打印倒三角形
完成了三角形与倒三角形的打印,通过这两个函数的组合调用将非常方便地实现菱形图形的打印,示例如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T47_28480.jpg?sign=1739041207-6ge4m1vxCvlqJqejhoCvI600CMHuJ26g-0-9dc1d3511ace98137a150c50c6033a5f)
运行程序,效果如图2-8所示。
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-P48_12954.jpg?sign=1739041207-hYPXgjN5A0Z47zULGYHKCC1pLKH1E2PT-0-bcf4e77f4e91fdc116010e46799d4b1a)
图2-8 打印菱形图形
可以发现,如果我们需要打印出复杂的图形,其实可以先将复杂图形进行拆解,将其拆解为多个简单图形的组合,之后分别编写简单图形的打印函数,组合调用函数即可。例如,编写一个打印行列数矩形的函数,示例如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T48_28482.jpg?sign=1739041207-9XzbQzIqRnlgjKGFEJ0yfn2XrMDNpDsD-0-80ab17819669e5bd35e7a4699cb0e622)
再略微修改三角形打印函数,使其指定三角形的绘制位置,示例如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T48_28484.jpg?sign=1739041207-IOAz861Nr5QtXPdWWNljO9tNo644oUcp-0-378e846a6a075f72898175b17cf6ed10)
通过组合调用上面的函数可以打印出一颗圣诞树形状的图形,示例如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T49_28487.jpg?sign=1739041207-B4Nq6NiHTGvh9kxOZnUqpgcG3b0QSLEK-0-1afd3b8600d81d0f02ceede6bbc3b51d)
运行代码,效果如图2-9所示。
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-P49_13016.jpg?sign=1739041207-5J1Euhm9w2UohxVT3iPBcoHyfE1TiBPO-0-2b008bd75bc775b56c0a0b824636490b)
图2-9 打印圣诞树形状的图形
发挥一下你的想象力与创造力,尝试使用Python打印出更多有趣的图形。