2017-01-15 5 views
0

J'essaye d'écrire un programme pour imprimer les 100 premiers nombres de Fibonacci. Ceci est mon code:Je n'arrive pas à faire fonctionner mon programme de séquence Fibonacci en Python

def main(): 

    print("The first 100 Fibonacci numbers are: ") 
    fibonacciList = (0,0,1) 
    loop = False 

    while not loop: 

     listLength = len(fibonacciList) 
     newFibonacci = fibonacciList[-1] + fibonacciList[-2] 
     fibonacciList = newFibonacci + fibonacciList 


     if (listLength > 103): 
      loop = true 

     print(fibonacciList) 

main() 

Quand je le lance, je reçois l'erreur ci-dessous se référant à la ligne fibonacciList = newFibonacci + fibonacciList:

TypeError: unsupported operand type(s) for +: 'int' and 'tuple' 

Je ne comprends pas ce qui ne va pas.

P.S .: Les deux zéros dans la liste de Fibonacci sont là pour empêcher quelques autres erreurs que j'ai eues plus tôt.

+1

Dans la ligne 'fibonacciList = newFibonacci + fibonacciList', vous effectuez '+' sur 'newFibonacci' qui contient' int' valeur et 'fibonacciList' qui est un tuple –

+1

Ajouter deux zéros à la liste n'est pas la bonne façon de résoudre tout problème que vous avez. Une seule séquence définie par F (n) = F (n-1) + F (n-2) commence par 2 0s: la liste infinie de 0s. – chepner

+1

'fibonacciList = (* fibonacciList, newFibonacci)' pourrait être plus proche de ce que vous cherchez –

Répondre

1

Essayez ceci:

print("The first 100 Fibonacci numbers are: ") 
fibonacciList = (0,0,1) 
loop = False 

while not loop: 

    listLength = len(fibonacciList) 
    newFibonacci = fibonacciList[-1] + fibonacciList[-2] 
    fibonacciList = fibonacciList + (newFibonacci,) 


    if (listLength > 103): 
     loop = True 

print(fibonacciList) 

Vous ne pouvez pas ajouter un entier à un tuple, mais vous pouvez concaténer deux avec tuples +, afin que nous puissions tuple-iser l'int avec (newFibonacci,).

Il existe des méthodes plus efficaces et lisibles pour calculer cette séquence, mais cela résout votre question immédiate.

0

Vous pouvez essayer ceci:

def main(): 

    print("The first 100 Fibonacci numbers are: ") 
    fibonacciList = [0,0,1] 
    loop = False 

    while not loop: 

     listLength = len(fibonacciList) 
     newFibonacci = fibonacciList[-1] + fibonacciList[-2] 
     fibonacciList.append(newFibonacci) 


     if (listLength > 103): 
      loop = True 
      print(fibonacciList) 

main() 
0

En plus des autres réponses que vous pouvez essayer la solution suivante, qui est plus rapide, plus efficace et plus lisible:

def fib(n): 
    fiblist = [] 
    x, y = 0, 1 

    for i in range(n): 
     fiblist.append(x) 
     x, y = y, x + y 

    print('The first {} Fibonacci numbers are: \n{}'.format(n, fiblist)) 

Ensuite, pour la première 100 numéros Fibonacci appellent la fonction comme suit:

fib(100)