Adloun

informatique (tronc commun des prépas scientifiques) · Chapitre 10 · Exercice de TD

L'effet de bord accidentel

Prouver et analyser : la boîte à outils formalisée · niveau 2

Énoncé

Prédire l'affichage du script suivant, diagnostiquer le problème et proposer deux corrections :

def normalise(notes: list) -> list:
    m = max(notes)
    for i in range(len(notes)):
        notes[i] = notes[i] / m
    return notes

brutes = [10, 15, 20]
normalisees = normalise(brutes)
print(brutes)

Corrigé

Le programme affiche [0.5, 0.75, 1.0]. La liste d'origine brutes a été modifiée par effet de bord. En effet, l'affectation notes[i] = ... modifie directement le contenu de la liste passée en paramètre, qui partage la même zone mémoire en raison de l'absence de copie.

  • Correction pure (sans effet de bord) : On crée et renvoie une nouvelle liste en laissant l'originale intacte : `python def normalise(notes: list) -> list: m = max(notes) return [x / m for x in notes] `
  • Correction avec effet de bord documenté : On assume la modification en place et on supprime le retour pour lever toute ambiguïté : `python def normalise(notes: list) -> None: """Modifie la liste notes en place en la normalisant.""" m = max(notes) for i in range(len(notes)): notes[i] /= m `

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre