=) associe une valeur à ce nom. Pour comprendre ce que fait un programme sans l'exécuter, on suit ses instructions dans l'ordre et on note la valeur de chaque variable après chaque ligne : c'est le tableau d'état, appelé aussi trace d'exécution. Savoir le remplir sans erreur est la base de tout le reste : conditions, boucles et fonctions se comprennent de la même façon.Python exécute les instructions dans l'ordre où elles sont écrites, une par ligne, de haut en bas. Une instruction ne connaît que ce qui a été fait avant elle : une variable doit avoir reçu une valeur avant d'être utilisée.
L'instruction x = 5 se lit « x reçoit 5 ». Python procède en deux temps :
= ;Le signe = n'est donc pas une égalité mathématique : à gauche, il y a toujours un nom de variable.
Une variable peut recevoir une nouvelle valeur ; l'ancienne est alors perdue.
x = x + 1 : Python calcule x + 1 avec l'ancienne valeur de x, puis range le résultat dans x.x += 1 est une écriture abrégée de la même instruction.Pour suivre un programme à la main :
temp = a, puis a = b, puis b = temp.a, b = b, a. Python calcule d'abord les deux valeurs de droite, puis les range.b = a copie la valeur de a dans b : modifier a ensuite ne change pas b (pour un nombre ou une chaîne).x + 1 seul calcule une valeur mais ne modifie pas x.| Code erroné | Code correct | Explication |
|---|---|---|
5 = x $\to$ SyntaxError | x = 5 | Le nom de la variable s'écrit à gauche du signe =, la valeur à droite. |
print(total) total = 0 $\to$ NameError | total = 0 print(total) | Une instruction ne voit que ce qui précède : la variable doit exister avant d'être lue. |
a = b b = a | a, b = b, a | Après la première ligne, l'ancienne valeur de a est perdue : les deux variables valent b. |
x + 1 | x = x + 1 | Le calcul seul ne change pas la variable : il faut ranger le résultat. |
a = 3
b = a + 2
a = b * 2
b = b - a
print(a, b) # 10 -5
Tableau d'état :
| Ligne | Instruction | a | b |
|---|---|---|---|
| 1 | a = 3 | 3 | |
| 2 | b = a + 2 | 3 | 5 |
| 3 | a = b * 2 | 10 | 5 |
| 4 | b = b - a | 10 | $-5$ |
score = 0
score = score + 10
score = score + 5
print(score) # 15
a = 5
b = 3
temp = a # temp vaut 5
a = b # a vaut 3
b = temp # b vaut 5
print(a, b) # 3 5
prix_ht = 40
taux_tva = 0.2
prix_ttc = prix_ht * (1 + taux_tva)
print(prix_ttc) # 48.0
Sans exécuter le programme, dire ce qu'il affiche, puis vérifier en Python.
x = 4
y = x * 3
x = x + 1
print(x, y)
Le programme affiche 5 12. À la ligne 2, y reçoit $4 \times 3 = 12$. La ligne 3 change x en 5, mais y garde la valeur 12 calculée avant : elle ne se recalcule pas.
Remplir le tableau d'état du programme suivant, puis donner l'affichage final.
n = 7
m = 2
n = n - m
m = m * n
n = n + m
m = n % m
print(n, m)
| Ligne | Instruction | n | m |
|---|---|---|---|
| 1 | n = 7 | 7 | |
| 2 | m = 2 | 7 | 2 |
| 3 | n = n - m | 5 | 2 |
| 4 | m = m * n | 5 | 10 |
| 5 | n = n + m | 15 | 10 |
| 6 | m = n % m | 15 | 5 |
Le programme affiche 15 5. À la ligne 6, n % m est le reste de la division de 15 par 10.
Les variables a, b et c valent respectivement 1, 2 et 3. Écrire des instructions pour qu'à la fin a vaille 2, b vaille 3 et c vaille 1 :
On sauvegarde la valeur de a, qui sera écrasée la première :
a, b, c = 1, 2, 3
temp = a # temp vaut 1
a = b # a vaut 2
b = c # b vaut 3
c = temp # c vaut 1
print(a, b, c) # 2 3 1
a, b, c = b, c, a : les trois valeurs de droite sont calculées avant toute affectation.Écrire un programme de quatre affectations, sans autre nombre que 2, qui produit exactement ce tableau d'état.
| Ligne | x | y |
|---|---|---|
| 1 | 2 | |
| 2 | 2 | 4 |
| 3 | 8 | 4 |
| 4 | 8 | 12 |
x = 2
y = x * 2 # 4
x = x * y # 2 × 4 = 8
y = x + y # 8 + 4 = 12
print(x, y) # 8 12
Méthode : à chaque ligne, une seule variable change ; on cherche comment obtenir sa nouvelle valeur à partir des valeurs de la ligne précédente. D'autres réponses sont possibles, par exemple y = x + x à la ligne 2.