2015-09-17 3 views
1

У меня возникли проблемы с правильной работой этого кода на Python. это код для отображения треугольника паскаля с использованием биномов. Я не знаю, что не так. Код выглядит следующим образомКод треугольника Паскаля

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    

и так далее. любая помощь будет приветствоваться. !!

+1

http://stackoverflow.com/questions/5598181/python-print-on-same -line –

+0

Что-то вроде этого: 'print (binomial (n, k), end =" ")' –

+0

Прежде всего: каков ожидаемый результат? Измените свой вопрос, чтобы отобразить желаемый результат. В то время как треугольник Паскаля выглядит легко на бумаге, есть много способов распечатать его на консоли. – frhd

ответ

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] 
0

Есть много неправильных вещей. Первое, что вы вычисляете значения: если вы строите треугольник pascal, вы хотите использовать предыдущую строку для вычисления текущего, а не использовать биномиальное вычисление (что дорого из-за количества умножений).

то по умолчанию, print добавляет "\ п"

Правильная реализация:

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 
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 
Смежные вопросы