【问题标题】:How to print this pyramid pattern up side down?如何将这个金字塔图案上下打印?
【发布时间】:2022-01-22 21:46:58
【问题描述】:

我正在尝试在金字塔图案下方打印。但不点击如何为其构建逻辑?

模式:

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

我已经尝试过这段代码,似乎这不是获取它的正确方法。感谢任何解决方案

import numpy as np
n = 5
cnt=0
var = np.arange(1,n+1)
for row in range(1,n+1):
  print(var[::-1][cnt:])
  cnt= cnt + 1

上述模式的输出:

[5 4 3 2 1]
[4 3 2 1]
[3 2 1]
[2 1]
[1]

【问题讨论】:

    标签: python design-patterns


    【解决方案1】:

    你真的需要/想要使用 numpy 吗?

    这很容易使用纯 python 实现。逻辑是在左边添加空格来填充(您也可以使用字符串函数,如rjust):

    n = 5
    for i in range(n):
        print('  '*i + ' '.join(map(str, range(n-i, 0, -1))))
    

    输出:

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

    注意。如果你有两位数,你应该使用rjust

    n = 15
    L = 0
    for i in range(n):
        s = ' '.join(map(str, range(n-i, 0, -1)))
        L = max(L, len(s))
        print(s.rjust(L))
    

    输出:

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

    【讨论】:

    • 你能详细说明一下加入的东西在做什么
    • @hives47801 join 正在从可迭代的元素中创建一个由分隔符分隔的字符串:'-'.join(['A', 'B', 'C']) 正在提供 'A-B-C'
    • @mozway : 除了join方法,你还有其他方法吗
    • @hives47801 您可以将嵌套循环与printend=' ' 一起使用,但这不是很好。就用join,这是标准方法。
    【解决方案2】:

    您可以创建一个函数来降低整体复杂性

    def pyramid(height):
       L = 0
       for i in range(height):
         s = ' '.join(map(str, range(height-i, 0, -1)))
         L = max(L, len(s))
         print(s.rjust(L))
    height = int(input('Enter the height of the Pyramid : '))
    pyramid(height)
    

    【讨论】:

      【解决方案3】:

      有什么解决办法吗?好的:

      >>> print("\n".join([ "{:>10}".format(" ".join([ str(x) for x in range(n,0,-1) ])) for n in range(5,0,-1) ]))
       5 4 3 2 1
         4 3 2 1
           3 2 1
             2 1
               1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-08
        • 1970-01-01
        • 2021-07-17
        相关资源
        最近更新 更多