2015-02-19 2 views
0
def tri(fib_lst,n): 

    lst = [] 
    if n > 1: 
     for i in range(n): 
      if i == 0 or i == n-1: 
       lst.append(1) 
      else: 
       lst.append((i-1)+i) 
    if n <= 1: 
     lst.append(1) 
    return lst 

def draw_pascal_triangle(fib_lst,n): 

    for i in range(n): 
     fib_lst.append(tri(fib_lst, i+1)) 

Затем, чтобы получить результаты, которые я вошел следующее:Создание треугольника Паскаля

>>> lst = [] 
>>> lst2 = [] 
>>> draw_pascal_triangle(lst, 5) 
>>> draw_pascal_triangle(lst, 8) 
>>> print(lst) 
>>> print(lst2) 

Результаты были:

[[1], [1, 1], [1, 1, 1], [1, 1, 3, 1], [1, 1, 3, 5, 1], [1], [1, 1], [1, 1, 1], [1, 1, 3, 1], [1, 1, 3, 5, 1], [1, 1, 3, 5, 7, 1], [1, 1, 3, 5, 7, 9, 1], [1, 1, 3, 5, 7, 9, 11, 1]] 

Я знаю, что моя проблема возникает в строке:

else: 
    lst.append((i+1)+i) 

, но я не знаю, что делать с исправить мою ошибку.

+0

Вы имели в виду передать тот же список обеим вызовам функций? – jonrsharpe

+0

да я сделал !! ну, чтобы получить мои последние результаты, мне нужно было запустить оба вызова функций –

ответ

0

Вот рабочий код, я только изменил одну линию, что вы написали:

def tri(fib_lst,n): 
    lst = [] 
    if n > 1: 
     for i in range(n): 
      if i == 0 or i == n-1: 
       lst.append(1) 
      else: 
       lst.append(fib_lst[-1][i-1]+fib_lst[-1][i]) 
    if n <= 1: 
     lst.append(1) 
    return lst 

def draw_pascal_triangle(fib_lst,n): 
    for i in range(n): 
     fib_lst.append(tri(fib_lst, i+1)) 

Тогда:

>>> lst = [] 
>>> lst2 = [] 
>>> draw_pascal_triangle(lst, 5) 
>>> draw_pascal_triangle(lst, 8) 
>>> print('\n'.join([str(l) for l in lst])) 
>>> print('\n'.join([str(l) for l in ls2])) 

Результат :

[1] 
[1, 1] 
[1, 2, 1] 
[1, 3, 3, 1] 
[1, 4, 6, 4, 1] 

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

Ваша ошибка была ошибкой алгоритма. Посмотрите на Wikipedia.

У нас есть lst[n][k] = lst[n-1][k-1] + lst[n-1][k].

+0

спасибо вам большое! –

1

Вот простой генератор pascal, который я только что сделал.

def generatePascal(depth):   
    pascal = [[1]] 

    for level in range(depth): 
     lastRow = pascal[-1] 
     paddedLastRow = [0] + lastRow + [0] 
     nextRow = [] 
     for position in range(len(paddedLastRow) - 1): 
      nextRow.append(paddedLastRow[position] + paddedLastRow[position+1]) 
     pascal.append(nextRow) 

    return pascal 

Например:

>>> generatePascal(4) 
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]] 
Смежные вопросы