使用具有给定值的python打印三角形金字塔

时间:2019-04-07 10:05:09

标签: python python-3.x

我已经印出了这样的三角形金字塔:

     * 
    * * 
   * * * 
  * * * * 
 * * * * * 

我的代码是:

for i in range(1,6):
    for j in range(6-i):
        print(" ", end="")
    for j in range(i):
        print("*", end=" ")
    print()

我想打印一个像这个星形金字塔的三角形: 如果输入1:打印第一张图像,然后输入2,则打印第二张图像。我想知道实际的逻辑。

enter image description here

1 个答案:

答案 0 :(得分:1)

考虑到代码的可伸缩性,我定义了两个参数sizelayer

  • size是三角形的高度,也是底部的星号
  • layer是 您要堆积的三角形层

以下是一些关键点:

  1. str.center在这里非常有帮助。如果我们知道width,它可以自动将其放在中间。因此在center的帮助下,如果我们计算星号和它们之间的margine。我们可以轻松地建立一个三角形。

  2. 实现该函数以生成单个三角形:首先打印top,然后打印body,最后打印bottom

  3. 在同一层中将单个三角形组合在一起,第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))

希望对您有所帮助,如有其他问题,请发表评论。 :)