Vue d'ensemble
En prépa, on n'écrit pas seulement du code : on doit surtout savoir lire un programme sur papier, prévoir sa sortie, reconnaître les patrons classiques (maximum, minimum, comptage, recherche) et corriger un code qui ne marche pas. Cette fiche rassemble ces réflexes, indispensables en DS et aux concours.
Prérequis
- Boucles, conditions, fonctions
- Listes et parcours
Tu sais coder mais tu bloques dès qu'il faut lire le code d'un autre ? Prévoir la sortie d'un programme est une compétence à part entière, très évaluée. Nos mentors alumni X · Centrale · Mines t'entraînent à dérouler n'importe quel programme sans machine.
Trouver un mentor →1. Dérouler un programme à la main
Pour prévoir la sortie, on suit le code ligne par ligne en notant la valeur de chaque variable dans une table de trace.
t = [3, 7, 2]
s = 0
for x in t:
s = s + x
print(s)| Tour | x | s avant | s après |
|---|---|---|---|
| 1 | 3 | 0 | 3 |
| 2 | 7 | 3 | 10 |
| 3 | 2 | 10 | 12 |
Le programme affiche 12.
2. Les patrons classiques
- Initialiser avec le premier élément (jamais 0 !).
- Parcourir la liste ; si un élément est plus grand, le retenir.
- Renvoyer le maximum trouvé.
def maximum(t):
m = t[0] # on part du premier élément
for x in t:
if x > m:
m = x # on garde le plus grand vu
return m
maximum([3, 7, 2, 9, 4]) # 9m = t[0]Initialisation correcte. On part du premier élément, pas de 0 : sinon un tableau de nombres négatifs donnerait un faux maximum (0).if x > m: m = xComparaison. À chaque élément, on met à jour m s'il est dépassé. À la fin, m est le plus grand.t :
c = 0
for x in t:
if x % 2 == 0:
c = c + 1
# c contient le nombre de pairs< au lieu de >. La recherche d'une valeur renvoie
l'indice (ou -1 si absente), comme la recherche séquentielle.
3. Tester et corriger
Un programme « qui a l'air juste » doit être testé sur plusieurs cas, dont les
cas limites (liste à un élément, valeurs négatives, etc.). L'instruction
assert vérifie qu'une condition est vraie.
assert maximum([3, 7, 2, 9, 4]) == 9
assert maximum([-5, -2, -8]) == -2 # cas des négatifs
assert maximum([42]) == 42 # cas limite : un seul élémentm = 0 au lieu de
m = t[0], alors maximum([-5, -2, -8]) renvoie 0 à tort : 0 n'est pas dans
la liste. Toujours partir d'un élément réel.
4. Exercices d'application
À faire de tête avant d'ouvrir le corrigé.
t = [4, 1, 6, 3]
c = 0
for x in t:
if x > 3:
c = c + 1
print(c)Voir la correction détaillée
Ce code du minimum est buggé. Trouve l'erreur et corrige-la.
def minimum(t):
m = 0
for x in t:
if x < m:
m = x
return mVoir la correction détaillée
m est initialisé à 0. Sur [3, 7, 2] (tous > 0), aucun x < 0, donc la fonction renvoie 0 — qui n'est même pas dans la liste.m = t[0].def minimum(t):
m = t[0]
for x in t:
if x < m:
m = x
return mminimum([3, 7, 2]) renvoie 2, et le cas des négatifs marche aussi.Récap final — Ce qu'il faut absolument retenir
Tu dois pouvoir répondre « oui » sans hésiter à chaque point.
- Sais-tu dérouler un programme à la main avec une table de trace ?
- Sais-tu écrire le patron du maximum (et du minimum) en initialisant avec
t[0]? - Sais-tu pourquoi initialiser le max/min à 0 est un bug (valeurs négatives) ?
- Sais-tu écrire un comptage (partir de 0, incrémenter sous condition) ?
- Sais-tu tester un programme sur des cas limites (un seul élément, négatifs) avec
assert?