![每个人的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=1739594074-o5hmgIKXQYsmCAe7kp74uvmR7d2m3xYo-0-dff7639354dddb9771f4475a566eae7d)
图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=1739594074-aEicRON5eOdeCQu7BxiiVJ5AeUmR4waa-0-5c8cdab689f3892ebed11c7589f2eb9c)
上面的代码定义了一个函数,通过传入行数作为参数,输出等腰三角形,例如传入参数10时,将打印共10行布局的等腰三角形,如图2-6所示。
对上面的代码进行简单的修改,即可将打印的等腰三角形变成倒三角形。示例代码如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T47_28476.jpg?sign=1739594074-80PMhieSJJ6DkkQmkQOmxeeoSmukYCm4-0-8e2ced035aabdd19b57db3f55a7abd41)
运行效果如图2-7所示。
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-P47_12919.jpg?sign=1739594074-TDVzbGbTG8b9KmfXMGwZtr3JQHovRFpH-0-c6706ffbef7564bcb3728355cc58e3cb)
图2-6 打印等腰三角形
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-P47_12920.jpg?sign=1739594074-ibOMkIjuL2IOaZ7phczd4ucAhGlG323Z-0-86620e749572c8744b6a3ea071777578)
图2-7 打印倒三角形
完成了三角形与倒三角形的打印,通过这两个函数的组合调用将非常方便地实现菱形图形的打印,示例如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T47_28480.jpg?sign=1739594074-uvZQXEnRlBKB89D4aAHfIn1LxAXGzSOQ-0-6e2f380b51bb3a4b1aed212f237140cd)
运行程序,效果如图2-8所示。
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-P48_12954.jpg?sign=1739594074-aNfx64543NPI671feY4xBDT3kLRCbAuU-0-0b06ac21b864312ef615b9ccde6c498a)
图2-8 打印菱形图形
可以发现,如果我们需要打印出复杂的图形,其实可以先将复杂图形进行拆解,将其拆解为多个简单图形的组合,之后分别编写简单图形的打印函数,组合调用函数即可。例如,编写一个打印行列数矩形的函数,示例如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T48_28482.jpg?sign=1739594074-h7aRZ7TYQ5xTRnx5d2N4HVdq9hSaQvk3-0-12adc5ebcf24e580e221c620b8975fcd)
再略微修改三角形打印函数,使其指定三角形的绘制位置,示例如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T48_28484.jpg?sign=1739594074-7KyigEs5kBss34iNwc1odbuUtGj9LeKH-0-8c8fc24d3739c9633eb73803cc88ae3a)
通过组合调用上面的函数可以打印出一颗圣诞树形状的图形,示例如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T49_28487.jpg?sign=1739594074-6g00kRclznol2WwT4hileMltUhyYWh5T-0-47fd5e9264fab540e84b5274e2b6e0c8)
运行代码,效果如图2-9所示。
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-P49_13016.jpg?sign=1739594074-14QBwLBzfSYGwhq6ZOrA6GzAicJ53JJh-0-ff9e861663b9c776c480552a4a09cfbb)
图2-9 打印圣诞树形状的图形
发挥一下你的想象力与创造力,尝试使用Python打印出更多有趣的图形。