Exercice 01 : Générateur de la Suite de Fibonacci
Objectif
Cet exercice a pour but de vous faire implémenter une fonction génératrice pour produire les nombres de la suite de Fibonacci, en illustrant l'avantage des générateurs pour créer des séquences potentiellement infinies avec une consommation mémoire minimale.
Contexte
La suite de Fibonacci est une suite de nombres où chaque nombre est la somme des deux précédents. Elle commence généralement par 0 et 1.
0, 1, 1, 2, 3, 5, 8, 13, 21, ...
Créer une liste de tous les nombres de Fibonacci jusqu'à une très grande limite pourrait consommer beaucoup de mémoire. Un générateur est donc la solution parfaite.
Énoncé
-
Créez un nouveau fichier Python nommé
fibonacci_generator.py. -
Définissez une fonction génératrice nommée
fibonacci_sequencequi accepte un argumentlimit.- Cette fonction générera les nombres de Fibonacci tant qu'ils sont inférieurs à
limit.
- Cette fonction générera les nombres de Fibonacci tant qu'ils sont inférieurs à
-
À l'intérieur de la fonction : a. Initialisez les deux premiers nombres de la suite, par exemple
a, b = 0, 1. b. Utilisez une bouclewhilequi continue tant que le nombre actuel (a) est inférieur àlimit. c. Dans la boucle : - Utilisezyield apour produire le nombre actuel de la suite. - Mettez à jour les variables pour calculer le nombre suivant. L'ancienbdevient le nouveaua, et la sommea + bdevient le nouveaub. - Astuce : L'assignation multiple en Python,a, b = b, a + b, est parfaite pour cela. -
Testez votre générateur :
- Créez une boucle
forpour itérer sur les nombres produits parfibonacci_sequence(100)et affichez chaque nombre. - Utilisez une expression génératrice et la fonction
sum()pour calculer la somme des nombres de Fibonacci inférieurs à 1000.
- Créez une boucle
Résultat Attendu
Fibonacci numbers up to 100:
0
1
1
2
3
5
8
13
21
34
55
89
Sum of Fibonacci numbers up to 1000: 2583
Cliquez ici pour voir un exemple de code de solution
# fibonacci_generator.py
def fibonacci_sequence(limit):
"""
A generator function that yields Fibonacci numbers up to a given limit.
"""
# Initialize the first two numbers
a, b = 0, 1
# Loop as long as the current number is less than the limit
while a < limit:
# Yield the current number, pausing execution
yield a
# Update the numbers for the next iteration
a, b = b, a + b
# --- Testing ---
# Test 1: Print Fibonacci numbers up to 100
print("Fibonacci numbers up to 100:")
# The for loop automatically handles the generator
for number in fibonacci_sequence(100):
print(number)
print("\n" + "-"*20 + "\n")
# Test 2: Sum of Fibonacci numbers up to 1000 using a generator expression
# This is equivalent to sum(fibonacci_sequence(1000))
fib_gen_expr = (n for n in fibonacci_sequence(1000))
total_sum = sum(fib_gen_expr)
print(f"Sum of Fibonacci numbers up to 1000: {total_sum}")