Adloun

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 une NameError, 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

Faire l'exercice suivant avec le tuteur

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.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant avec le tuteur →