python - 使用给定值的python打印三角金字塔
问题描述
我打印了一个像这样的三角金字塔:
*
* *
* * *
* * * *
* * * * *
我的代码是:
for i in range(1,6):
for j in range(6-i):
print(" ", end="")
for j in range(i):
print("*", end=" ")
print()
我想打印一个像这个星形金字塔这样的三角形:如果我输入 1:打印第一张图像,那么如果我输入 2,则打印第二张。我想知道实际的逻辑。
解决方案
考虑到代码的可扩展性,我定义了两个参数,size
并且layer
:
size
是三角形的高度也是底部的星号layer
是你要堆积的三角形层
以下是一些关键点:
str.center
在这里很有帮助。如果我们知道width
,它可以自动把它放在它的中间。所以在 的帮助下center
,如果我们计算星数和margine
它们之间。我们可以很容易地建立一个三角形。实现生成单个三角形的函数:首先打印
top
,然后body
,最后bottom
。在同一层将单个三角形组合在一起,第0层有1个三角形,第1层有2个三角形......我们可以计算当前层的三角形数量并通过相应的字符串将它们连接起来,然后再将
total_width
它们放在中心。
这是我的解决方案:
from functools import reduce
def generate_triangle(size, width):
res = []
# print top
res.append('*'.center(width))
# print body
margin = 1
for i in range(size - 2):
res.append(('*' + ' ' * margin + '*').center(width))
margin += 2
# print bottom
res.append(' '.join('*' * size).center(width))
return res
def generate_triangles(size, layer):
width = size * 2 - 1
total_width = layer * (width + 1) - 1
res = []
for i in range(layer):
res += reduce(lambda x, y: x + [' '.join(y for _ in range(i + 1)).center(total_width)],
generate_triangle(size, width), [])
return res
测试代码:
def triangle_test():
def print_matrix(matrix):
for row in matrix:
print(row)
print()
print_matrix(generate_triangles(6, 1))
print_matrix(generate_triangles(5, 2))
print_matrix(generate_triangles(4, 4))
输出:
*
* *
* *
* *
* *
* * * * * *
*
* *
* *
* *
* * * * *
* *
* * * *
* * * *
* * * *
* * * * * * * * * *
*
* *
* *
* * * *
* *
* * * *
* * * *
* * * * * * * *
* * *
* * * * * *
* * * * * *
* * * * * * * * * * * *
* * * *
* * * * * * * *
* * * * * * * *
* * * * * * * * * * * * * * * *
希望对您有所帮助,如果您还有其他问题,请发表评论。:)
推荐阅读
- elasticsearch - 用于解析应用程序日志的 Elasticsearch 分析器
- java - 向spring发送带有请求的ajax数组时,出现错误java.lang.NumberFormatException: For input string: ""
- awk - 在一段文本中的每个单词旁边放置单词索引
- html - 使用 iframe html 加载的页面的浏览器打印未正确分页(文本行在分页符处拆分)
- locust - 使用 locust 时的 CPU 利用率
- python - 如何通过python django计算时间变量并将时间数据与当前时间进行比较?
- flutter - Flutter:将暗模式开关更改为图标
- php - Json没有到达服务器
- javascript - 使用 javascript 制作搜索框并合并 CSV
- java - 由于使用了 Observable List,Gson 无法反序列化