Adloun

Que vaut a après a, b = 1, 2 puis a, b = b, a + b

Application directe du cours · niveau 1 (application) · NSI (première), chapitre 4 — Les types construits · P-uplets, déballage et compréhensions

Énoncé

Que vaut a après a, b = 1, 2 puis a, b = b, a + b ? Dérouler à la main, puis vérifier. Pourquoi l'ordre des deux affectations n'a-t-il pas d'importance ?

Corrigé

La trace. Après a, b = 1, 2, on a et . Puis a, b = b, a + b : le membre de droite est évalué d'abord, avec les valeurs actuelles, ce qui donne le couple . Ce couple est ensuite déballé :


a, b = 1, 2
a, b = b, a + b
print(a, b)          # 2 3

Pourquoi l'ordre des deux affectations n'a pas d'importance. Parce qu'il n'y a pas deux affectations. Il y en a une seule, dont le membre de droite est un p-uplet entièrement construit avant que la moindre variable ne change. Le mécanisme est en trois temps :

Le contraste, à faire tourner. En deux lignes séparées, l'ordre devient décisif :


x, y = 1, 2
x = y            # x vaut 2, l'ancienne valeur de x est PERDUE
y = x + y        # on calcule 2 + 2, pas 1 + 2
print(x, y)      # 2 4     <- et non 2 3

On obtient au lieu de . Il faudrait une variable temporaire pour retrouver le bon résultat : c'est précisément ce dont l'affectation multiple dispense.

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.