打印三角形

案例一

打印输出职下三角形

                         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至12的数字组成,第一行把左边的空白补齐需要11个空,第二行需要10个空,直至最后一行的0个空;每一行的数字与数字间有一个空格,而数字有1位数,也有2位数,1位数使用一个空格来填充,2位数就使用2个空格来填充。

n = 12
for i in range(1, n + 1):
    for j in range(n, 0, -1):
        if i < j:
            print(' ' * len(str(j)), end=' ') # 数字转换成字符串后,其长度就是空格的个数
        else:
            print(j, end=' ')
    print()

方法二

此三角形整体是右对齐,只要得到最后一行的长度就可以以右对齐来打印

n = 12
tail_line = ' '.join([str(i) for i in range(12, 0, -1)])  # 最后一行
for i in range(1, n):
    print('{0:>{1}}'.format(' '.join([str(j) for j in range(i, 0, -1)]), len(tail_line)), end=' ')
    print()
print(tail_line)

案例二

打印如下三角形

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
head_line = ' '.join([str(i) for i in range(n, 0, -1)])
print(head_line)
for j in range(len(head_line)):
    if head_line[j] == ' ':
        line = ' '*j + ' ' +  head_line[j+1:]
        print(line)

方法二

两层循环实现

n = 12
for i in range(n, 0, -1):
    for j in range(n, 0, -1):
        if j <= i:
            print(j, end=' ')
        else:
            print(' ' * len(str(j)), end=' ')
    print()