sciences numériques et technologie (seconde) · Chapitre 7 · Exercice de TD
FizzBuzz, et le piège de l'ordre
Projets et mini-jeux · Motifs et FizzBuzz · niveau 2
Énoncé
- Un élève écrit la version ci-dessous. Donner sa sortie pour , puis expliquer.
for i in range(1, 21):
if i % 3 == 0:
print("Fizz")
elif i % 5 == 0:
print("Buzz")
elif i % 15 == 0:
print("FizzBuzz")
else:
print(i)
- Écrire une version sans tester , en construisant la chaîne à afficher.
- Généraliser en
fizzbuzz(n, regles)oùreglesest une liste de couples (diviseur, mot).
Corrigé
1. Pour , elle affiche Fizz, et jamais FizzBuzz.
est multiple de : la première condition est vraie, la branche est prise, et les elif suivants ne sont jamais atteints. La troisième condition est du code mort — aucun nombre ne peut y parvenir, puisque tout multiple de est déjà multiple de . Quand des conditions s'emboîtent, la plus restrictive passe en premier.
2. En construisant la chaîne, le problème disparaît :
for i in range(1, 21):
mot = ""
if i % 3 == 0:
mot = mot + "Fizz"
if i % 5 == 0:
mot = mot + "Buzz"
print(mot if mot else i)
Ici les deux if sont indépendants : traverse les deux et donne FizzBuzz par concaténation. Le cas particulier n'a plus à être écrit — il découle de la règle.
3. La version générale :
def fizzbuzz(n, regles):
for i in range(1, n + 1):
mot = ""
for d, m in regles:
if i % d == 0:
mot = mot + m
print(mot if mot else i)
fizzbuzz(20, [(3, "Fizz"), (5, "Buzz")])
fizzbuzz(30, [(3, "Fizz"), (5, "Buzz"), (7, "Bazz")])
Ajouter une règle ne demande plus de toucher au code : c'est le signe qu'on a trouvé la bonne structure.
100 % gratuit
Essaie le suivant avec le tuteur
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 14 autres exercices corrigés dans ce chapitre, et 20 à chercher avec le tuteur
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre et la correction filmée du TD : 2 minutes sans compte
Sans compte : le cours, le premier QCM, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.