Aller au contenu principal
U/
Idiomes
python

Classe itérable Fibonacci avec __iter__ / __next__

Implémenter une classe Fibonacci qui produit les termes de la suite à l'infini, puis utiliser itertools.islice pour extraire les 10 premiers termes.

45 minPublié le 20 mai 2026Proposé par Anonyme

Défi

// Lisez attentivement, codez sur votre machine

Énoncé

Créer une classe Fibonacci qui implémente le protocole d'itération Python : __iter__ renvoie self et __next__ produit le terme suivant de la suite de Fibonacci sans jamais lever StopIteration (itérateur infini). La suite commence par 0, 1, 1, 2, 3, 5, …. Utiliser itertools.islice pour extraire les 10 premiers termes et les afficher sur une seule ligne séparés par des espaces.

Contraintes

  • Python ≥ 3.6.
  • __iter__ doit renvoyer self.
  • __next__ ne lève jamais StopIteration (l'itérateur est infini par conception).
  • Extraction des N premiers termes obligatoirement via itertools.islice (pas de boucle for avec compteur).
  • Bibliothèque standard uniquement (itertools).
  • Sortie : les 10 premiers termes sur une ligne, séparés par un espace.

Exemple

import itertools

class Fibonacci:
    def __init__(self):
        self.a, self.b = 0, 1

    def __iter__(self):
        return self

    def __next__(self):
        valeur = self.a
        self.a, self.b = self.b, self.a + self.b
        return valeur

premiers = list(itertools.islice(Fibonacci(), 10))
print(*premiers)
0 1 1 2 3 5 8 13 21 34
Espace solution

Proposer une solution

Connectez-vous ou créez un compte pour envoyer votre code (aucune exécution côté serveur — on stocke juste le texte pour la communauté).

// À garder en tête
  • D'abord, faire marcher

    On ne cherche pas à optimiser : d'abord, on fait marcher le truc. Optimiser vient ensuite — et ça aussi, ça s'apprend. (Si un défi porte sur l'optimisation, son énoncé le précise.)

  • Pas de mauvaise réponse

    Il n'y a pas de mauvaise réponse à un défi. Le but, c'est de le faire. Ce qui compte, c'est de s'entraîner.

  • Trop dur ? Au suivant

    Un défi te résiste ? N'hésite pas à en prendre un autre. Ils seront encore là demain.