Python 3.x 我需要编写一个程序来打印以下图案:

Python 3.x 我需要编写一个程序来打印以下图案:,python-3.x,Python 3.x,我需要制作以下图案: 1 2 3 4 5 6 1 2 3 4 5 1 2 3 4 1 2 3 1 2 1 我已经写了一个代码,它产生相同的结果,但是是右边向上的形式。我不明白怎么把它翻过来 for i in range(1, 6 + 1): for j in range(1, rows + 1): if(j < i): print(' ', end = ' ')

我需要制作以下图案:

1 2 3 4 5 6
  1 2 3 4 5
    1 2 3 4
      1 2 3
        1 2
          1
我已经写了一个代码,它产生相同的结果,但是是右边向上的形式。我不明白怎么把它翻过来

for i in range(1, 6 + 1):
    for j in range(1, rows + 1):
        if(j < i):
            print(' ', end = '  ')
        else:
            print(i, end = '  ')
    print()
(1,6+1)范围内的i的
:
对于范围(1,行+1)内的j:
如果(j
您可以使用
range()倒计时。

编辑:这在行>=12时有点失败,值得一提的是,在这个实现中找到了bug,并提供了另一个干净的解决方案。但是,我们可以通过使用制表符(
\t
)而不是空格来模拟制表(见底部)

为什么不简单一点呢

rows = 6
l = list(range(rows))

for i in range(rows):
   print(" " * 2*i + " ".join(str(x) for x in l[:rows-i]))
编辑:如果需要排列,请尝试以下操作:

>>> for i in range(rows):
...    x = " " * 2*i + " ".join(str(x) for x in l[:rows-i])
...    print(x[::-1])

6 5 4 3 2 1
5 4 3 2 1  
4 3 2 1    
3 2 1      
2 1        
1

较大行数的错误:

>>> rows = 14
>>> l = list(range(rows))
>>> for i in range(rows):
...    print(" " * 2*i + " ".join(str(x) for x in l[:rows-i]))
... 
0 1 2 3 4 5 6 7 8 9 10 11 12 13
  0 1 2 3 4 5 6 7 8 9 10 11 12
    0 1 2 3 4 5 6 7 8 9 10 11
      0 1 2 3 4 5 6 7 8 9 10
        0 1 2 3 4 5 6 7 8 9
          0 1 2 3 4 5 6 7 8
            0 1 2 3 4 5 6 7
              0 1 2 3 4 5 6
                0 1 2 3 4 5
                  0 1 2 3 4
                    0 1 2 3
                      0 1 2
                        0 1
                          0


修补程序1:使用标签。如果您的制表符长度与我相同,并且您使用的话,这可以正常工作。因此,从我所看到的情况来看,您正在尝试制作表单:

     1
    21
   321
  4321
 54321
654321
因此,循环需要反转,并且需要添加一个空格填充部分

rows = 6
for i in range(1, rows+1):
    out = ''
    for j in range(1, rows):
        out += ' '

    for j in range(i, 0, -1):
        out += str(j)
    print(out)

    rows -=1

使用列表理解的一行语句是

pattern = '\n'.join((' ' * 2 * i) + ' '.join(str(n) for n in range(1, num + 1)) for i, num in enumerate(range(6, -1, -1)))
为了澄清,您可以看看在Python交互终端上执行的以下命令

>>> pattern = '\n'.join((' ' * 2 * i) + ' '.join(str(n) for n in range(1, num + 1)) for i, num in enumerate(range(6, -1, -1)))
>>> 
>>> print(pattern)                                                                                            
1 2 3 4 5 6
  1 2 3 4 5
    1 2 3 4
      1 2 3
        1 2
          1

>>> 
建议对此类重复性工作使用函数方法(如果您想尝试使用多个示例)


此解决方案与您的解决方案相似,只是做了一些更改
它首先打印出三角形形状所需的空间数
然后它计数到
count
然后它移动到下一行

num = 6
for i in range(num,0,-1):
    print('  '*(num - i), end='')
    for j in range(i):
        print(j + 1, end=' ')
    print()
如果使用的值大于10,则会产生奇怪的效果

1234567891011241516
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 
1 2 3 4 5 6 7 8 9 10 11 12 13 
1 2 3 4 5 6 7 8 9 10 11 12 
1 2 3 4 5 6 7 8 9 10 11 
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 
1 2 3 4 5 6 7 8 
1 2 3 4 5 6 7 
1 2 3 4 5 6 
1 2 3 4 5 
1 2 3 4 
1 2 3 
1 2 
1.
您可以使用tablate将所有内容保留在其列中。在这里,我还使用了列表理解来减少代码大小。
代码:

输出:

----------
1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16
1  2  3  4  5  6  7  8  9   10  11  12  13  14  15
1  2  3  4  5  6  7  8   9   10  11  12  13  14
1  2  3  4  5  6  7   8   9   10  11  12  13
1  2  3  4  5  6   7   8   9   10  11  12
1  2  3  4  5   6   7   8   9   10  11
1  2  3  4   5   6   7   8   9   10
1  2  3   4   5   6   7   8    9
1  2   3   4   5   6   7    8
1   2   3   4   5   6    7
1   2   3   4   5    6
1   2   3   4    5
1   2   3    4
1   2    3
1    2
1.
-  -  -  -  -  -  -  -  -  --  --  --  --  --  --  --

这里的
行是什么?
与原始问题相同(即,未指定)。行的值是什么??就超出终端大小而言,几乎没有什么是好的。在单元格中的字符数超过制表符长度之前,制表符将正常工作。对您来说,这可能是3,但如果终端宽度为157列,则在任何输入计数超过42的终端中,我的输出都无法读取。即使使用制表法,也会使每一列的宽度等于要在其中打印的最长单个元素。有了tablate,这些信息在文本文件中的可读性可以保持更长时间,但我想我们都同意,这可能是毫无用处的。
     1
    21
   321
  4321
 54321
654321
rows = 6
for i in range(1, rows+1):
    out = ''
    for j in range(1, rows):
        out += ' '

    for j in range(i, 0, -1):
        out += str(j)
    print(out)

    rows -=1
pattern = '\n'.join((' ' * 2 * i) + ' '.join(str(n) for n in range(1, num + 1)) for i, num in enumerate(range(6, -1, -1)))
>>> pattern = '\n'.join((' ' * 2 * i) + ' '.join(str(n) for n in range(1, num + 1)) for i, num in enumerate(range(6, -1, -1)))
>>> 
>>> print(pattern)                                                                                            
1 2 3 4 5 6
  1 2 3 4 5
    1 2 3 4
      1 2 3
        1 2
          1

>>> 
def print_num_triangle(n=6):
    """
    1 2 3 4 5 6
      1 2 3 4 5
        1 2 3 4
          1 2 3
            1 2
              1
    """

    pattern = '\n'.join((' ' * 2 * i) + ' '.join(str(n) for n in range(1, num + 1)) for i, num in enumerate(range(n, -1, -1)))
    print(pattern)


if __name__ == "__main__":
    print_num_triangle(10)

    # 1 2 3 4 5 6 7 8 9 10
    #   1 2 3 4 5 6 7 8 9
    #     1 2 3 4 5 6 7 8
    #       1 2 3 4 5 6 7
    #         1 2 3 4 5 6
    #           1 2 3 4 5
    #             1 2 3 4
    #               1 2 3
    #                 1 2
    #                   1
    #                     

    print_num_triangle(7)
    # 1 2 3 4 5 6 7
    #   1 2 3 4 5 6
    #     1 2 3 4 5
    #       1 2 3 4
    #         1 2 3
    #           1 2
    #             1

    print_num_triangle() # default -> 6
    # 1 2 3 4 5 6
    #   1 2 3 4 5
    #     1 2 3 4
    #       1 2 3
    #         1 2
    #           1
num = 6
for i in range(num,0,-1):
    print('  '*(num - i), end='')
    for j in range(i):
        print(j + 1, end=' ')
    print()
from tabulate import tabulate
count = 16
numbers = [[''] * (count - i) + [j+1 for j in range(i)] for i in range(count, 0, -1)]
print(tabulate(numbers))