帕斯卡的三角形代码

时间:2015-09-17 08:20:51

标签: python

我无法让这个python代码正常工作。它是使用二项式显示pascal三角形的代码。我不知道出了什么问题。代码看起来像这样

from math import factorial
def binomial (n,k):
    if k==0:
        return 1
    else:
        return int((factorial(n)//factorial(k))*factorial(n-k))

def pascals_triangle(rows):
    rows=20
    for n in range (0,rows):
        for k in range (0,n+1):
            print(binomial(n,k))
    print '\n'

这就是它一直在打印

1                                                                                                            
1                                                                                                         1                                                                                                            
1                                                                                                            
2                                                                                                            
1                                                                                                            
1                                                                                                            
12                                                                                                           
3                                                                                                            
1                                                                                                            
1                                                                                                            
144                                                                                                          
24                                                                                                           
4                                                                                                            
1                                                                                                            
1                                                                                                            
2880                                                                                                         
360                                                                                                          
40                                                                                                           
5                                                                                                            
1                                                                                                            
1                                                                                                            
86400                                                                                                        
8640                                                                                                         
720                                                                                                          
60                                                                                                           
6                                                                                                            
1                                                                                                            
1                                                                                                            
3628800                                                                                                      
302400                                                                                                       
20160                                                                                                        
1260              

然后继续。任何帮助都会受到欢迎。!!

3 个答案:

答案 0 :(得分:0)

有许多错误的事情。 第一个是你计算值的方法:如果构建一个pascal三角形,你想使用前一行来计算当前行,而不是使用二项式计算(由于乘法次数,这是很昂贵的)。 p>

然后默认情况下,print会附加“\ n”

正确实施:

def print_line(x):
    print (" ".join(map(str,x)))

def pascals_triangle(rows):
    cur_line=[1,1]
    for x in range (2,rows):
        new_line=[1]
        for n in range (0,len(cur_line)-1):
            new_line.append(cur_line[n]+cur_line[n+1])
        new_line.append(1)
        print_line (new_line)
        cur_line=new_line

这提供了以下输出

$ python pascal.py
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
1 9 36 84 126 126 84 36 9 1

答案 1 :(得分:0)

from math import factorial
def binomial (n,k):
    if k==0:
        return 1
    else:
        return int((factorial(n)//factorial(k))*factorial(n-k))

def pascals_triangle(rows):
    for n in range (rows):
        l = [binomial(n, k) for k in range (0,n+1)]
        print l

pascals_triangle(5)

output:
    [1]
    [1, 1]
    [1, 2, 1]
    [1, 12, 3, 1]
    [1, 144, 24, 4, 1]

答案 2 :(得分:0)

你的二项式函数有一个小的包围错误,它给你错误的输出:

from math import factorial

def binomial(n, k):
    if k==0:
        return 1
    else:
        return int((factorial(n)/(factorial(k)*factorial(n-k))))

def pascals_triangle(rows, max_width):
    for n in range (0,rows):
        indent = (rows - n - 1) * max_width
        print(' ' * indent, end='')
        for k in range(0, n+1):
            print("{:^{w}}".format(binomial(n, k), w = max_width*2), end='')
        print()

pascals_triangle(7, 2)

通过添加填充参数,可以使输出看起来像这样:

             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