2015-07-23 3 views
-5

Я хочу сгенерировать последовательность (трибоначчи, где у меня есть первые три числа последовательности, а следующий номер/элемент получается путем суммирования последних трех чисел. (Как в фибоначчи).Создание элементов в sequnce

Вот мой код:

 
def tribonacci(signature, n): 
    trib = signature 
    for x in range(3,n, 1): 
     trib.append(sum(signature[x - 3:x]) 
    return trib 

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

+1

Используйте редактор с выделенными скобками! – Olaf

+0

Обратите внимание, что 'trib = signature' не делает копию (действительно, если бы это было так, ваш код не работал бы вообще!), Это просто означает, что у вас есть два разных имени для одного и того же объекта, что бесполезно запутывает. – jonrsharpe

ответ

0
trib.append(sum(signature[x - 3:x]) 

Отсутствующие кл.. osing скобки в конце этой линии

Должен быть:

trib.append(sum(signature[x - 3:x])) 
1

Не ответ, как таковые, но обратите внимание, что вы можете написать последовательности, как это как генераторов (которые yield значения, в отличии от функций которые return их), а не поставлять n авансом и строить весь список:

def trib(signature): 
    """Generate a tribonacci sequence from the supplied signature.""" 
    a, b, c = signature 
    while True: 
     yield a 
     a, b, c = b, c, a + b + c 

в использовании, для Пример:

>>> trib_111 = trib((1, 1, 1)) 
>>> for _ in range(10): 
    print next(trib_111) 


1 
1 
1 
3 
5 
9 
17 
31 
57 
105 

Это более эффективно использует память, как вы можете перемещаться по нему на неопределенное время без необходимости каждый хранить более трех значений a, b и c.

Смежные вопросы