Adloun

Repérer un effet de bord

Application directe du cours · niveau 1 (application) · NSI (terminale), chapitre 16 — Calculabilité, décidabilité et paradigmes de programmation

Énoncé

Repérer un effet de bord.

La fonction normaliser ci-dessous doit plafonner les notes à . Expliquer le problème qu'elle pose, puis en donner une version pure.


def normaliser(notes):
    for i in range(len(notes)):
        if notes[i] > 20:
            notes[i] = 20
    return notes

Corrigé

La fonction modifie la liste qu'elle reçoit : c'est un effet de bord. Comme elle renvoie aussi cette liste, l'appelant croit obtenir une nouvelle liste alors qu'il reçoit l'ancienne, désormais altérée.


def normaliser_pur(notes):
    return [20 if n > 20 else n for n in notes]

brut = [12, 25, 8]
print(normaliser_pur(brut))   # [12, 20, 8]
print(brut)                   # [12, 25, 8]  -> intact

print(normaliser(brut))       # [12, 20, 8]
print(brut)                   # [12, 20, 8]  -> modifie !

Le second affichage de brut révèle la différence. Une fonction pure laisse toujours ses arguments dans l'état où elle les a trouvés : c'est ce qui permet de la tester isolément et de l'appeler sans crainte.

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.