Livre_silo 30 août 2013 16:32 Page 73
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
73
3 – Expressions : types et opérations
SAVOIR-FAIRE Échanger le contenu de deux variables
On se place dans l’état
. .
1 .
x
. .
2 .
y
et l’on souhaite placer le contenu de la variable
y dans la variable x et le contenu de la variable x dans la variable y.
Un premier essai infructueux consisterait à évaluer les instructions :
x = y
y = x
Cela ne fonctionne pas car après l’évaluation de la première instruction, on se retrouve
dans l’état
. .
2 .
x
. .
2 .
y
et la seconde instruction nous ramène dans ce même état.
Lorsque l’on écrit ces deux instructions, en se trompant donc, on a une autre vision
des choses. On pense en effet que l’expression x dans l’instruction y = x fait référence
à la valeur initiale de x avant d’exécuter les instructions. En fait, et c’est assez naturel,
on s’imagine que ces deux instructions forment un bloc et qu’elles seront exécutées en
même temps. Or, ce n’est pas le cas ; les instructions sont exécutées l’une après l’autre.
La façon la plus naturelle et la plus générale pour placer dans y l’ancienne valeur de x
consiste à la stocker dans une variable auxiliaire :
t = x
x = y
y = t
On va exécuter ces instructions l’une après l’autre : après la première, on passe dans
l’état
. .
1 .
x
. .
2 .
y
. .
1 .
t
, après la deuxième dans l’état
. .
2 .
x
. .
2 .
y
. .
1 .
t
et enfin après la troisième dans l’état
. .
2 .
x
. .
1 .
y
. .
1 .
t
.
On constate que les valeurs des variables nommées x et y ont bien été échangées.
Il faut toutefois prendre garde au fait que la variable t existe peut-être déjà dans l’état
courant. L’ essentiel est de choisir une variable qui soit n’est pas présente dans l’état
courant, soit ne nous intéresse plus.
On verra page 75 une solution spécifique à Python pour résoudre ce problème de
l’échange de deux variables.
Exercice 3.13 On considère un état dans lequel sont définies trois variables de noms x, y et z. Décrire
une suite d’instructions permettant de placer :
• le contenu de x dans z,
• le contenu de y dans x,
• le contenu de z dans y.
Précédent

- 86/402

Suivant