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 :
- évaluer
beta + bavec les anciennes valeurs, soit et ; - construire le couple ;
- le déballer dans
aetb.
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.