Intermédiaire
🧠 Fondamentaux
20 XP
0 personnes ont réussi
Générateur infini
Un des grands avantages des générateurs, c'est qu'ils peuvent produire une séquence infinie. Comme les valeurs sont calculées à la demande, le générateur ne plante pas : il attend simplement qu'on lui demande la prochaine valeur.
Bien sûr, tu ne peux pas faire list() sur un générateur infini (ça tournerait pour toujours). Mais tu peux utiliser next() pour récupérer les valeurs une par une, ou combiner avec un autre mécanisme pour n'en prendre qu'un certain nombre.
Un while True dans un générateur ne bloque pas le programme : le yield met la fonction en pause entre chaque valeur.
Écris un générateur infini cycle(éléments) qui répète indéfiniment les éléments d'une liste. Quand il arrive au bout de la liste, il recommence au début.
Exemple : gen = cycle([1, 2, 3]) Les 7 premières valeurs : 1, 2, 3, 1, 2, 3, 1
Tests (3/4)
7 premiers du cycle
gen = cycle([1, 2, 3])
result = [next(gen) for _ in range(7)]
assert result == [1, 2, 3, 1, 2, 3, 1]
Cycle d'un seul élément
gen = cycle(['a'])
assert [next(gen) for _ in range(3)] == ['a', 'a', 'a']
Cycle de deux
gen = cycle([True, False])
assert [next(gen) for _ in range(4)] == [True, False, True, False]
+ 0 tests cachés
Indices (3 disponibles)
Solution officielle
def cycle(éléments):
while True:
for elem in éléments:
yield elem