有人可以编写 n = 19 行的代码并得到下图吗?对于 Python

Can someone write the code for n = 19 rows and get this following figure? For Python

编写一个接受数字 n 作为输入的函数,它 returns n 行看起来像下面的模式。 运行 n = 19 的函数(下面的输出是 n=19 的)。

n = int(input("enter number of rows:"))
for i in range(1, n+1):
    for j in range(1, n-i+1):
       print(end=' ')
    for j in range(i,0, -1):
        print(''+str(j),end='')
    for j in range(2,i+1):
        print(str(j)+'_',end='')
    print()

输出

                  1
                 212_
                3212_3_
               43212_3_4_
              543212_3_4_5_
             6543212_3_4_5_6_
            76543212_3_4_5_6_7_
           876543212_3_4_5_6_7_8_
          9876543212_3_4_5_6_7_8_9_
         109876543212_3_4_5_6_7_8_9_10_
        11109876543212_3_4_5_6_7_8_9_10_11_
       1211109876543212_3_4_5_6_7_8_9_10_11_12_
      131211109876543212_3_4_5_6_7_8_9_10_11_12_13_
     14131211109876543212_3_4_5_6_7_8_9_10_11_12_13_14_
    1514131211109876543212_3_4_5_6_7_8_9_10_11_12_13_14_15_
   161514131211109876543212_3_4_5_6_7_8_9_10_11_12_13_14_15_16_
  17161514131211109876543212_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_
 1817161514131211109876543212_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_
191817161514131211109876543212_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_

这是一个行之有效的解决方案。由于这看起来像是作业,所以我就给出算法。

For each row create a list of row * 2 + 1 size and fill with underscores
  Ex: row 0 -> [_], row 1 -> [___], row 2 -> [_____], etc
Find the middle of row and put 1 at the index
Then put 2 and indexes middle-2 and middle + 2
Put 3 and indexes middle-4 and middle+4
Repeat to finish row
   Ex: [_________] ->
       [____1____] ->
       [__2_1_2__] ->
       [3_2_1_2_3]
Print spaces - 1st row gets n spaces. 2nd row gets n-1 spaces, etc
Print the list
Repeat for next row

对此稍作改进的是只构建最后一行,然后循环打印最后一行的切片。从中间开始向外加宽。


我看到你已经接受了另一个答案,所以我假设你已经完成了作业,所以我可以 post 我的代码。

n = 19
last_line = ['_'] * (n * 2 - 1)
middle = len(last_line) // 2
for j in range(0, n, 2):
    last_line[middle + j] = str(j // 2 + 1)
    last_line[middle - j] = str(j // 2 + 1)
for row in range(n):
    print(f"{' ' * (n - row)}{''.join(last_line[middle - row:middle + row + 1])}")

代码的前6行构建金字塔的最后一行。最后 2 行打印了其中的一部分。

这会奏效,会给你的作业一个很好的答案。

n = int(input("enter number of rows:")) 
r = 0
for i in range(1, int((n+1)/2+1)):
    r += 1
    for j in range(1, n-i+1):
        print(end='  ') 
    for kk in range(i,0, -1):
        if i==1:
            print(' '+str(i))
        else:
            if kk==i:
                print(end= ' ')
            if kk==1:
                print(str(kk), end='')
            else:
                print(str(kk)+'_', end='')
    for ll in range(2,i+1):
        if i>1:
            print('_'+str(ll), end='')
    if i>1:
        print()
    r += 1
    if r > n:
        break
    for jj in range(1, n-i+1):
        print(end='  ')
    for k in range(i,0, -1):
        if i==1:
            print('_'+str(i)+'_', end='')
        else:
            print('_'+str(k), end='')
    for l in range(2,i+1):
        if l==2:
            print('_'+str(l)+'_',end='') 
        else:
            print(str(l)+'_',end='') 
    print()

结果:

                                 1
                                _1_
                               2_1_2
                              _2_1_2_
                             3_2_1_2_3
                            _3_2_1_2_3_
                           4_3_2_1_2_3_4
                          _4_3_2_1_2_3_4_
                         5_4_3_2_1_2_3_4_5
                        _5_4_3_2_1_2_3_4_5_
                       6_5_4_3_2_1_2_3_4_5_6
                      _6_5_4_3_2_1_2_3_4_5_6_
                     7_6_5_4_3_2_1_2_3_4_5_6_7
                    _7_6_5_4_3_2_1_2_3_4_5_6_7_
                   8_7_6_5_4_3_2_1_2_3_4_5_6_7_8
                  _8_7_6_5_4_3_2_1_2_3_4_5_6_7_8_
                 9_8_7_6_5_4_3_2_1_2_3_4_5_6_7_8_9
                _9_8_7_6_5_4_3_2_1_2_3_4_5_6_7_8_9_
               10_9_8_7_6_5_4_3_2_1_2_3_4_5_6_7_8_9_10