不规则的空间使图案异常

Posted

技术标签:

【中文标题】不规则的空间使图案异常【英文标题】:irregular spaces making pattern abnormal 【发布时间】:2022-01-23 17:35:42 【问题描述】:

我有一个使用以下代码打印的图案

代码:

n=5

def pyramidupdown(n):
  cnt=0
  space=2
  lst= [str(row) for row in reversed(range(1,n+1))]
  for i in range(1,n+1):
    if i == 1:
      s=' '.join(lst)
      print(s)
    else:
      lst[cnt]=' '
      s=' '.join(lst)
      print(s)     
      cnt = cnt + 1

它打印下面的模式作为输出:

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

但我的问题是当n 值被定义为2 位数字时,如15 图案打印不正确

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

预期输出:

 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

我需要对现有代码进行哪些更改才能正确打印模式

【问题讨论】:

【参考方案1】:

我会这样做:

def pyramidupdown(n):
    for i in range(n,0,-1):  # loop n rows (in descending order)
        lst = []
        for j in range(n,0,-1): # loop n numbers (in descending order)
            s = str(j)
            # at the i-th row replace the first i string numbers
            # (i.e. where j > i)
            # by as many spaces as there are characters in that string  
            if j <= i:
                lst.append(s)
            else:
                lst.append(' '*len(s)) 
        print(" ".join(lst))

你甚至可以把它做成 1-liner(只是为了好玩):

def pyramidupdown(n):
    print('\n'.join([" ".join([str(j) if j <= i else ' '*len(str(j)) for j in range(n,0,-1)]) for i in range(n,0,-1)]))

现在我了解了您的代码:这是使其工作的最小调整:

def pyramidupdown(n):
  cnt=0
  lst= [str(row) for row in reversed(range(1,n+1))]
  for i in range(1,n+1):
    if i == 1:
      s=' '.join(lst)
      print(s)
    else:
      lst[cnt]=' '*len(lst[cnt]) # here replace by correct number of spaces
      s=' '.join(lst)
      print(s)     
      cnt = cnt + 1

【讨论】:

能否一步步详细说明代码 请看编辑 查看第二次编辑... 谢谢兄弟。希望你喜欢我的方法。是的,只有我会这样做

以上是关于不规则的空间使图案异常的主要内容,如果未能解决你的问题,请参考以下文章

python使用箱图法和业务规则进行异常数据处理并检查预测使用的数据特征是否有字段缺失的情况并补齐

9.5 异常处理规则

CAD怎么画不规则多边形

图像隐写基于matlab区域性像素等值图像隐写含Matlab源码 2413期

系统返回码规则建议

TheSierpinskiFractal(POJ-1941)递推