首页 > 解决方案 > 如何在python3中打印/输出重叠的钻石

问题描述

你将如何输出 n 颗重叠的钻石,每颗钻石的高度为 2n-1。以下是所需的输出:

n = 3

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

n = 4

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

n = 5

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

我尝试了一些使用循环的代码。我已经设法正确地输出每个形状 wrt 输入 n。但是,我不能只在多行上显示“单行”上的钻石,如下所示:

n = 3

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

这是我使用的代码:

n = int(input()) #for number of diamonds per row
height = 2*n - 1

for j in range(1, n + 1): #for printing h no. of diamonds
    #from row 1 to middle row
    for row in range(1, (height + 1)//2 + 1):
        for spaces in range((height + 1)//2 - row): #print spaces per row
            print(" ", end = "")
        for stars in range((2*row) - 1): #print stars per row
            if stars % 2 == 0:
                print("*", end = "")
            else:
                print(" ", end = "")
        print()

    #from middle row to last row
    for row in range((height + 1)//2 + 1, height + 1):
        for spaces in range(row - (height + 1)//2):
            print(" ", end = "")
        for stars in range((height + 1 - row)*2 - 1):
            if stars % 2 == 0:
                print("*", end = "")
            else:
                print(" ", end = "")
        print()

标签: pythonpython-3.x

解决方案


这个怎么样?

n = 4

for i in list(range(1, n+1)) + list(range(n-1, 0, -1)):
    rowpattern = (' '*(n-i) + '* '*(i) + ' '*(n-i)) * n
    print(rowpattern)

编辑:在下面的评论之后,这更准确:

n = 4

for i in list(range(1, n)) + list(range(n, 0, -1)):
    rowpattern = ' ' * (n-i) + ('* ' * (i if i!=n else i-1) +
        ' ' * (2 * (n - i) - 2)) * n + '*' *(1 if i==n else 0)
    print(rowpattern)

推荐阅读