我已经印出了这样的三角形金字塔:
*
* *
* * *
* * * *
* * * * *
我的代码是:
for i in range(1,6):
for j in range(6-i):
print(" ", end="")
for j in range(i):
print("*", end=" ")
print()
我想打印一个像这个星形金字塔的三角形: 如果输入1:打印第一张图像,然后输入2,则打印第二张图像。我想知道实际的逻辑。
答案 0 :(得分:1)
考虑到代码的可伸缩性,我定义了两个参数size
和layer
:
size
是三角形的高度,也是底部的星号layer
是
您要堆积的三角形层以下是一些关键点:
str.center
在这里非常有帮助。如果我们知道width
,它可以自动将其放在中间。因此在center
的帮助下,如果我们计算星号和它们之间的margine
。我们可以轻松地建立一个三角形。
实现该函数以生成单个三角形:首先打印top
,然后打印body
,最后打印bottom
。
在同一层中将单个三角形组合在一起,第0层具有1个三角形,第1层具有2个三角形...我们只需计算当前层中的三角形数量,并通过相应的字符串将它们合并,然后使用{ {1}},使其再次居中。
这是我的解决方法:
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))
希望对您有所帮助,如有其他问题,请发表评论。 :)