L'essentiel à connaître
Pour savoir ce qu'affiche un programme Python, fais comme l'ordinateur : lis une ligne à la fois, de haut en bas, et note au brouillon la valeur de chaque variable après chaque ligne. Une variable est un nom qui désigne une valeur, et a = a * 2 est une affectation : Python calcule d'abord ce qui est à droite du signe =, puis range le résultat dans la variable de gauche. Si a valait 3, cette ligne lui donne la valeur $3 \times 2 = 6$, et l'ancienne valeur est perdue.
Chaque valeur a un type : int pour un entier, float pour un nombre à virgule, écrit avec un point (3.5), str pour un texte entre guillemets, bool pour True (vrai) ou False (faux), ce que donne une comparaison. La documentation officielle de Python le précise : la division / donne toujours un float, et + additionne deux nombres mais colle deux textes bout à bout.
Avec if, elif (« sinon si ») et else (« sinon »), Python teste les conditions dans l'ordre et n'exécute que le bloc de la première condition vraie : les suivantes ne sont même pas testées. Deux if l'un sous l'autre font, eux, deux tests indépendants. Un bloc se repère à son indentation, le décalage vers la droite en début de ligne.
La boucle for i in range(5) fait 5 tours, avec i qui vaut 0, 1, 2, 3 puis 4 : la borne de fin n'est jamais atteinte, et range(3, 8) donne 3, 4, 5, 6 et 7. La boucle while (« tant que ») teste sa condition au début de chaque tour, jamais au milieu : elle s'arrête au premier test faux, même si la variable a dépassé la limite pendant le dernier tour.
Exemple : le tableau de suivi de ce programme, une ligne par tour de boucle.
s = 0
k = 1
while s < 10:
s = s + k
k = k + 2
| Moment | Test s < 10 | s | k |
|---|---|---|---|
| Départ | aucun | 0 | 1 |
| Tour 1 | vrai | 1 | 3 |
| Tour 2 | vrai | 4 | 5 |
| Tour 3 | vrai | 9 | 7 |
| Tour 4 | vrai | 16 | 9 |
Au test suivant, $16 \lt 10$ est faux : la boucle s'arrête avec s égal à 16, bien au-delà de 10.
À retenir : une variable garde sa valeur jusqu'à sa prochaine affectation. Elle ne se recalcule jamais toute seule quand une autre variable change.
Piège classique : une ligne qui n'est pas décalée sous une boucle n'en fait pas partie. Elle ne s'exécute qu'une fois, quand la boucle est finie.
Quiz : teste tes connaissances
Garde ton brouillon à côté : chaque question se règle en suivant les variables, comme dans le tableau ci-dessus. La difficulté monte, et les trois dernières questions sont les plus piégeuses.
Question 1 : Qu'affiche ce programme ?
note = 10
if note >= 10:
print("admis")
else:
print("ajourné")
Réponse : B. Le signe >= se lit « supérieur ou égal », et $10 \geq 10$ est vrai : Python exécute le bloc du if et saute le else. Répondre « ajourné », c'est lire > à la place de >=.
Question 2 : Qu'affiche ce programme ?
a = 4
b = a + 3
a = 10
print(b)
Réponse : D. b a été calculée quand a valait 4 : $4 + 3 = 7$. Modifier a ensuite ne change pas b. Le piège, 13, traite b = a + 3 comme une formule de tableur, recalculée à chaque changement.
Question 3 : Qu'affiche l'instruction print(7 / 2) ?
Réponse : A. La division / donne toujours un float : $7 \div 2 = 3{,}5$, que Python affiche avec un point. Le piège, 3, est le quotient de la division entière, qui s'écrit 7 // 2.
Question 4 : Qu'affiche ce programme ?
a = "12"
b = "3"
print(a + b)
Réponse : C. Avec les guillemets, a et b sont des textes, et + les colle bout à bout. Le piège, 15, demanderait des nombres écrits sans guillemets : 12 + 3.
Question 5 : Qu'affiche ce programme ?
a = 5
b = a > 3
print(b)
Réponse : A. a > 3 est une comparaison, et $5 \gt 3$ est vrai : b reçoit le booléen True. Le piège, 5, croit que b reçoit la valeur de a, alors qu'elle reçoit le résultat du test.
Question 6 : Qu'affiche ce programme ?
total = 0
for i in range(4):
total = total + i
print(total)
Réponse : D. range(4) donne 0, 1, 2 et 3, donc total vaut $0 + 1 + 2 + 3 = 6$. Le piège, 10, fait aller range(4) de 1 à 4 : $1 + 2 + 3 + 4 = 10$.
Question 7 : Qu'affiche ce programme ?
x = 15
if x > 5:
print("moyen")
elif x > 10:
print("grand")
else:
print("petit")
Réponse : B. $15 \gt 5$ est vrai : Python affiche « moyen » et saute la suite, sans même tester le elif. « grand » tente parce que $15 \gt 10$ est vrai aussi, mais seule la première condition vraie compte.
Question 8 : Qu'affiche ce programme ?
s = 0
for i in range(2, 7):
if i > 3:
s = s + i
print(s)
Réponse : C. range(2, 7) donne 2, 3, 4, 5 et 6, et seuls 4, 5 et 6 passent le test : $4 + 5 + 6 = 15$. Le piège, 9, oublie 6 : c'est 7, la borne de fin, qui est exclue.
Question 9 : Qu'affiche ce programme ?
n = 1
while n < 20:
n = n * 3
print(n)
Réponse : D. n passe de 1 à 3, puis 9, puis 27, et le test $27 \lt 20$, faux, arrête la boucle. Le piège, 9, oublie que le test se fait au début du tour : $9 \lt 20$ est vrai, donc un tour de plus a lieu.
Question 10 : Qu'affiche ce programme ?
compte = 0
k = 10
while k > 0:
k = k - 3
compte = compte + 1
print(compte)
Réponse : A. k vaut 7, puis 4, puis 1, puis $1 - 3 = -2$ : la boucle fait 4 tours avant que le test $-2 \gt 0$ soit faux. Le piège, 3, s'arrête quand k vaut 1, alors que $1 \gt 0$ est encore vrai.
Question 11 : Ce programme veut échanger les valeurs de a et b. Qu'affiche-t-il ?
a = 2
b = 9
a = b
b = a
print(a, b)
Réponse : C. Après a = b, a vaut 9 et le 2 est perdu ; b = a range ensuite 9 dans b. Le piège, « 9 2 », croit l'échange réussi : il aurait fallu garder d'abord la valeur de a dans une troisième variable.
Question 12 : Qu'affiche ce programme ?
x = 4
if x < 5:
x = x + 3
if x > 5:
x = x * 2
print(x)
Réponse : B. Deux if séparés sont testés l'un après l'autre. $4 \lt 5$ est vrai, donc x devient 7 ; puis $7 \gt 5$ est vrai à son tour, et x devient $7 \times 2 = 14$. Le piège, 7, traite le second if comme un elif, qui aurait été sauté.
Question 13 : Qu'affiche ce programme ? Chaque print écrit sur une nouvelle ligne.
i = 0
while i < 3:
i = i + 1
print(i)
Réponse : D. À chaque tour, i augmente avant d'être affiché. Quand i vaut 2, $2 \lt 3$ est vrai : i passe à 3 et s'affiche, puis le test $3 \lt 3$, faux, arrête la boucle. Le piège, « 0, 1, 2 », lit le print comme s'il venait avant l'addition.
Question 14 : Combien de fois ce programme affiche-t-il « tour » ?
n = 0
while n < 3:
print("tour")
n = n + 1
Réponse : A. La ligne n = n + 1 n'est pas décalée : elle est hors de la boucle. Dans la boucle, n reste à 0 et $0 \lt 3$ reste vrai : c'est une boucle infinie. Le piège, « 3 fois », lit l'intention du programmeur au lieu de l'indentation.
Sources
Documentation officielle de Python, tutoriel en français : « Introduction informelle à Python » (affectation, division, textes, boucle while) et « D'autres outils de contrôle de flux » (if, elif, for, range).