Prédire l'effet de chacun de ces deux fragments, puis vérifier
Application directe du cours · niveau 2 · NSI (première), chapitre 4 — Les types construits · Tableaux, indices et matrices
Énoncé
Prédire l'effet de chacun de ces deux fragments, puis vérifier :
t = [1, 2, 3]
for x in t:
x = x + 1
t2 = [1, 2, 3]
for i in range(len(t2)):
t2[i] = t2[i] + 1
Expliquer la différence, et en tirer la règle sur le choix du parcours.
Corrigé
print(t) # [1, 2, 3] <- INCHANGE
print(t2) # [2, 3, 4] <- modifie
L'explication. for x in t donne à x une copie de la valeur de la case, pas la case elle-même. Écrire x = x + 1 fait pointer x vers un nouvel entier ; le tableau, lui, ne sait rien de cette variable. Au tour suivant, x est réaffecté à l'élément suivant et la valeur calculée est perdue.
t2[i] = t2[i] + 1 désigne au contraire la case d'indice : c'est une affectation dans le tableau.
La règle. Parcourir par élément chaque fois que c'est possible — c'est plus court et l'on ne peut pas se tromper d'indice. Passer par indice dans deux situations seulement :
- on a besoin de la position (la renvoyer, comparer deux tableaux rang par rang) ;
- on veut modifier le tableau en place.
Le piège tient à ce qu'aucune erreur n'est signalée. Le premier fragment s'exécute parfaitement, sans message, et ne fait rien. C'est le type de défaut qu'un jeu de tests attrape immédiatement — encore faut-il en avoir un. À noter : avec un tableau de tableaux, la conclusion s'inverse en partie ; on y revient dans la banque supplémentaire.
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.