Réécrire en boucle avec append la compréhension [i for i in range(50)…
Application directe du cours · niveau 1 (application) · NSI (première), chapitre 4 — Les types construits · P-uplets, déballage et compréhensions
Énoncé
Réécrire en boucle avec append la compréhension [i for i in range(50) if i % 3 == 0 and i % 5 == 0]. Quelle version préférez-vous, et pourquoi ?
Corrigé
resultat = []
for i in range(50):
if i % 3 == 0 and i % 5 == 0:
resultat.append(i)
print(resultat) # [0, 15, 30, 45]
Les deux écritures donnent [0, 15, 30, 45] : les multiples de inférieurs à — car être multiple de et de , c'est être multiple de leur plus petit commun multiple.
Laquelle préférer ? La compréhension, ici, et pour des raisons précises :
- elle tient sur une ligne lisible — c'est le critère du cours ;
- elle ne comporte pas d'accumulateur à initialiser. La ligne
resultat = []est un oubli possible, et son oubli produit soit uneNameError, soit — bien pire — l'ajout au tableau d'un calcul précédent ; - elle dit ce que contient le tableau, quand la boucle dit comment le remplir. Sur un filtre, c'est le « quoi » qui intéresse le lecteur.
La boucle reprend l'avantage dès que le corps fait plus d'une chose : afficher au passage, compter en parallèle, s'arrêter en cours de route. On ne met pas d'effet de bord dans une compréhension. La compréhension décrit un tableau ; la boucle exécute un traitement.
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.