数字三角形的打印(python)

方法一:

# 最常规打印法
# 利用空格进行右对其
n = 12
for i in range(1, n + 1):
    for j in range(n ,0, -1):
        if j > i:
            print(" " * len(str(j)), end=" ")
        else:
            print(j, end=" ")
    print() # 换行

方法二:

'''
1.先打印最后一行,然后计算它的长度
2.然后再使用format进行右对其
3.注意join的使用它在每次遍历时每个元素必须是字符串
'''
n = 12
g = (str(i) for i in range(n, 0, -1))
str1 = " ".join(g)
for i in range(1, n + 1):
    print("{:>{}}".format(" ".join((str(j) for j in range(i, 0, -1))), len(str1)))

方法三:

# 利用切片的方式
n = 12
g = [ str(i) for i in range(n, 0, -1)]
man = " ".join(g)
length = len(man)
for j in range(1, n + 1):
    print("{:>{}}".format(" ".join(g[n-j:n]), length))

结果:

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

字符串切割方法:
方法四:

'''
1.利用空格进行字符串的切片
2.先用列表标记出临界点
'''
n = 12
#使用join拼接字符串
str1 = " ".join([str(i) for i in range(n, 0, -1)])
tab = {10**i for i in range(1, 5)}  # 集合使用hash一步到位,效率极高
step = 1
num = 2
length = len(str1)
for i in range(1, n + 1):
    print("{:>{}}".format(str1[-step:], length))  # 使用format函数进行右对齐
    if (i + 1) in tab:
        num += 1
    step += num

结果:

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

方法五

'''
到三角形
1.先生成最后一排
2.然后每遇见一个空格,利用切片打印空格后面的一排
3.注意这里for循环i的大小和没有被切的部分的长度一样,
4.print函数中spe自带一个空格
'''
n = 12
tal = " ".join([str(i) for i in range(n, 0, -1)])
print(tal)
lenght = len(tal)
for i in range(1, lenght+1):
    if tal[i - 1] == " ":
        print(" " * i, tal[i:], sep='')

结果:

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

方法六:

n = 12
tail = " ".join([str(i) for i in range(n, 0, -1)])
print(tail)
for i, c in enumerate(tail):
    if c == " ":
        print(" "*i, tail[i+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

方法七:

n = 12
tail = " ".join([str(i) for i in range(n, 0, -1)])
lenstr = len(tail)
for i in range(-1, -lenstr-1, -1):
    if tail[i] == " ":
        print(" "*(i+lenstr), tail[i+1:])
print(tail)

结果:

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