Python - 格式化我的pascal三角形

时间:2015-04-03 11:53:39

标签: python

我编写了一个生成pascal三角形的代码。以下是我的代码中的函数,它处理pascal三角形的间距。

def print_pascals_triangle(triangle):
    largest_element = triangle[-1][len(triangle[-1]) // 2]
    element_width = len(str(largest_element))
    def format_row(row):
        return ' '.join([str(element).center(element_width) for element in row])
    triangle_width = len(format_row(triangle[-1]))
    for row in triangle:
        print(format_row(row).center(triangle_width))

这给了我以下输出:

Enter the number of rows you want in your Pascal`s Triangle: 10
                 1                     
               1   1                   
             1   2   1                 
           1   3   3   1               
         1   4   6   4   1             
       1   5   10  10  5   1           
     1   6   15  20  15  6   1         
   1   7   21  35  35  21  7   1       
 1   8   28  56  70  56  28  8   1     

正如你所看到的那样,间距并不完美,我的帕斯卡三角形也没有居中。我如何完美地居中我的帕斯卡三角形。任何帮助/提示非常感谢。谢谢!

完美的PASCAL三角形!

                     1
                  1     1
               1     2     1
            1     3     3     1
         1     4     6     4     1
      1     5    10    10     5     1
   1     6    15    20    15     6     1
1     7    21    35    35    21     7     1

1 个答案:

答案 0 :(得分:0)

考虑单个输出的长度和它之前的空格数,该常数等于最长输出的长度的两倍。

您想要这个:

   0:              1
   1:            1   1
   2:          1   2   1
   3:        1   3   3   1
   4:      1   4   6   4   1
   5:    1   5  10  10   5   1

最长的输出是10,否。每个输出分配的空间4。 10之前有2个空格,而5之前有3个空格,使其保持“居中”。

记住这一点,下面是代码:

import math as mt

def combine(n,r):
    ncr=(mt.factorial(n))/((mt.factorial(r))*(mt.factorial(n-r)))
    return ncr

def pascal():
  i=int(input("Enter index: "))
  z=len(str(int(combine(i,(i//2)))))
  nosp=z*i

  for k in range(0,i+1):
    sttr=''
    for l in range(0,k+1):
        sttr+=(" "*(2*z-len(str(int(combine(k,l))))))+str(int(combine(k,l)))
    isp=len(str(i))-len(str(k))+1
    print(isp*" "+str(k)+": "+nosp*" "+sttr)
    nosp-=z

print("Pascal's Triangle.")
pascal()
print("Done!")

它将产生以下输出:

Pascal's Triangle.
Enter index: 10
  0:                                    1
  1:                                 1     1
  2:                              1     2     1
  3:                           1     3     3     1
  4:                        1     4     6     4     1
  5:                     1     5    10    10     5     1
  6:                  1     6    15    20    15     6     1
  7:               1     7    21    35    35    21     7     1
  8:            1     8    28    56    70    56    28     8     1
  9:         1     9    36    84   126   126    84    36     9     1
 10:      1    10    45   120   210   252   210   120    45    10     1
Done!

如果您不希望额外的索引编号打印语句,则可以修改此代码。

我知道,我的代码一团糟且难以理解。我是编程新手:)