NSI (terminale) · Chapitre 16 · Application directe du cours
Repérer un effet de bord
Calculabilité, décidabilité et paradigmes de programmation · niveau 1 (application)
É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 notesCorrigé
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.
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
- 8 autres exercices corrigés dans ce chapitre
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute 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.