使用python打印模式的替代解决方案

时间:2018-04-22 13:32:52

标签: python string design-patterns

我想使用python打印模式,我已经完成但我想 知道可能的其他解决方案: -

A B C D E F G F E D C B A
A B C D E F   F E D C B A
A B C D E       E D C B A
......
....
A                       A

这是我的代码: -

n=0
for i in range(71,64,-1):
    for j in range(65,i+1):
        a=chr(j)
        print(a, end=" ")
    if n>0:
        for l in range(1,3+(n-1)*4):
            print(end=" ")
    if i<71:
        j=j+1
    for k in range(j-1,64,-1):
        b=chr(k)
        print(b, end=" ")
    n=n+1
    print()

1 个答案:

答案 0 :(得分:1)

这是使用第三方库numpy的替代方法。我特意使用这个库,因为它允许使用矢量化赋值,而不是使用内部循环。

from string import ascii_uppercase
import numpy as np

n = 7

# extract first n letters from alphabet
letters = ascii_uppercase[:n]
res = np.array([list(letters + letters[-2::-1])] * (n-1))

# generate indices that are removed per line
idx = (range(n-i-1, n+i) for i in range(n-1))

# printing logic
print(' '.join(res[0]))
for i, j in enumerate(idx):
    # vectorised assignment
    res[i, j] = ' '
    print(' '.join(res[i]))

结果:

A B C D E F G F E D C B A
A B C D E F   F E D C B A
A B C D E       E D C B A
A B C D           D C B A
A B C               C B A
A B                   B A
A                       A