FizzBuzz sans aucun if
Exercice supplémentaire · niveau 2 · sciences numériques et technologie (seconde), chapitre 7 — Projets et mini-jeux · Motifs et FizzBuzz
Énoncé
Écrire FizzBuzz sans utiliser if, en exploitant le fait qu'une chaîne multipliée par True vaut elle-même et par False la chaîne vide. Puis dire pourquoi ce n'est pas un progrès.
Corrigé
for i in range(1, 21):
print("Fizz" * (i % 3 == 0) + "Buzz" * (i % 5 == 0) or i)
Cela marche parce que True vaut et False vaut dans un calcul : "Fizz" <em> True donne "Fizz", "Fizz" </em> False donne "". Le or final renvoie i quand la chaîne est vide, une chaîne vide étant considérée comme fausse.
Pourquoi ce n'est pas un progrès. Le programme est plus court, mais il repose sur trois conventions implicites empilées — booléen-entier, chaîne vide fausse, or renvoyant une valeur et non un booléen. Un lecteur doit les connaître toutes pour comprendre une ligne. La version en if se lit sans rien savoir.
La brièveté n'est pas la lisibilité, et le code est lu bien plus souvent qu'il n'est écrit. On garde ce genre d'écriture pour le plaisir de la comprendre, pas pour la mettre en production.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.