Intermédiaire
🧠 Fondamentaux
20 XP
0 personnes ont réussi
Protocole iterateur
Quand tu écris for x in quelque_chose, Python appelle en coulisses deux méthodes spéciales : __iter__() et __next__(). Comprendre ce protocole, c'est comprendre comment fonctionnent les boucles for, les générateurs, et les itérables paresseux que tu utilises dans Django et pandas.
__iter__() retourne l'itérateur (souvent self), et __next__() retourne la valeur suivante ou lève StopIteration quand c'est fini.
Crée une classe Compte qui fait un compte à rebours. Le constructeur prend debut. L'itérateur va de debut jusqu'à 0 inclus, en décrémentant de 1 à chaque appel.
Exemple : list(Compte(5)) donne [5, 4, 3, 2, 1, 0]
Tests (2/4)
Compte a rebours
assert list(Compte(5)) == [5, 4, 3, 2, 1, 0]
Utilisable dans un for
result = []
for n in Compte(3):
result.append(n)
assert result == [3, 2, 1, 0]
+ 0 tests cachés
Indices (3 disponibles)
Solution officielle
class Compte:
def __init__(self, debut):
self.courant = debut
def __iter__(self):
return self
def __next__(self):
if self.courant < 0:
raise StopIteration
val = self.courant
self.courant -= 1
return val