NSI (première) · Chapitre 4 · Application directe du cours
Réécrire en boucle avec append la compréhension [i for i in range(50)…
Les types construits · P-uplets, déballage et compréhensions · niveau 1 (application)
É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.
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
- 16 autres exercices corrigés dans ce chapitre, et 20 à chercher avec le tuteur
- Le podcast et la vidéo du chapitre et la correction filmée du TD : 2 minutes sans compte
Sans compte : le cours, 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.