Contrôle du flux
Département de Mathématiques et Informatique, Faculté des Sciences et Techniques, Université Cheikh Anta Diop de Dakar
Contenu
Jusqu’ici, le code s’exécutait ligne après ligne, de haut en bas. On apprend à casser cette ligne droite : exécuter un bloc sous condition, et répéter un bloc autant de fois que nécessaire. C’est ce qui rend un programme réellement utile.
if / elif / else pour décider.range, accumulation.L’entraînement se fait dans le notebook, avec une cellule « À vous » après chaque notion.
Deux mécanismes : décider (suivre une branche selon un test) et répéter (reboucler tant qu’un test reste vrai).
L’idée en une phrase
Une instruction if exécute un bloc seulement si un test est vrai. Le test est un booléen (Séance 1). Deux éléments de syntaxe sont obligatoires : les deux points : en fin de ligne, et l’indentation du bloc (son décalage vers la droite).
L’indentation n’est pas décorative en Python : c’est elle qui délimite le bloc. Tout ce qui est décalé sous le if lui appartient ; dès qu’on revient à gauche, on sort du bloc.
if et elseRésultat →
Admis
Le bloc du if s’exécute si le test est vrai ; sinon, c’est le bloc du else. Ici note vaut 12, donc « Admis ».
elifRésultat →
Bien
Python teste dans l’ordre et s’arrête au premier test vrai : 14 n’est pas \(\geq\) 16, mais est \(\geq\) 14.
Résultat →
Valide
On réutilise and / or / not (Séance 1) pour former des tests plus riches.
La syntaxe des blocs
Trois erreurs reviennent sans cesse : 1. oublier les deux points : à la fin de la ligne if ; 2. ne pas indenter le bloc (ou l’indenter de travers) — Python lève une IndentationError ; 3. écrire = (affecter) au lieu de == (comparer) dans le test.
Règle simple : toute ligne qui se termine par : ouvre un bloc, et ce bloc est décalé de quatre espaces. On garde une indentation cohérente dans tout le fichier.
L’idée en une phrase
Une boucle for exécute un bloc une fois par élément d’une collection. À chaque tour, la variable de boucle prend la valeur de l’élément courant.
C’est le moyen naturel de traiter une liste, une chaîne, ou toute suite de valeurs, sans écrire le même code plusieurs fois. Comme pour le if, le corps de la boucle est un bloc indenté après les deux points.
Résultat →
Dakar
Louga
Mbour
La variable ville prend successivement chaque valeur de la liste. Le bloc s’exécute donc trois fois.
rangeLa fonction range
range(n) produit les entiers de 0 à n-1 ; range(a, b) va de a à b exclu.
0
1
2
3
4
tour 1
tour 2
tour 3
Le schéma de l’accumulation
On prépare une variable avant la boucle, avec une valeur de départ, puis on la met à jour à chaque tour.
Résultat →
total : 54
moyenne : 13.5
Résultat →
villes de plus de 5 lettres : 2
On combine boucle et condition : le compteur n’avance que pour les villes dont le nom dépasse 5 lettres (Saint-Louis, Ziguinchor).
Initialiser avant, mettre à jour dedans
La variable qui accumule (total, grandes) doit être créée avant la boucle, avec une valeur de départ (0 pour une somme). L’initialiser à l’intérieur la remettrait à zéro à chaque tour. Et l’oublier complètement provoque une NameError au premier +=.
Le schéma est toujours le même : préparer \(\rightarrow\) parcourir en mettant à jour \(\rightarrow\) utiliser le résultat après la boucle.
enumerate : l’indice et la valeurRésultat →
0 Dakar
1 Louga
2 Mbour
enumerate fournit à chaque tour un couple (indice, valeur), qu’on déballe dans deux variables — pratique pour numéroter un affichage.
zip : deux listes en parallèleRésultat →
Dakar : 1200000
Thies : 320000
Kaolack : 240000
zip avance dans les deux listes en même temps et associe les éléments qui se correspondent, position par position.
L’idée en une phrase
Une boucle while répète un bloc tant qu’un test reste vrai. On l’emploie quand on ne connaît pas d’avance le nombre de tours, mais qu’on sait quand s’arrêter.
Différence avec for : for parcourt une collection connue ; while tourne jusqu’à ce qu’une condition devienne fausse. Il faut donc faire évoluer cette condition à chaque tour, pour finir par sortir.
whileRésultat →
compteur = 0
compteur = 1
compteur = 2
fin
À chaque tour, compteur augmente ; quand il atteint 3, le test devient faux et la boucle s’arrête.
Toujours avancer vers la sortie
Si la condition d’un while ne devient jamais fausse — par exemple si l’on oublie compteur = compteur + 1 — la boucle tourne sans fin et le programme se bloque. Avant d’écrire un while, il faut identifier la variable qui progresse vers la sortie, et vérifier qu’elle change bien à chaque tour.
En pratique : une boucle emballée s’interrompt avec le bouton Interrupt du noyau Jupyter.
break : arrêter la boucleRésultat →
1
2
Dès que n vaut 3, break interrompt complètement la boucle : les valeurs 3, 4 et 5 ne sont jamais affichées.
continue : sauter un tourRésultat →
1
3
5
continue saute le reste du bloc et passe au tour suivant. Ici, les nombres pairs sont ignorés, seuls les impairs sont affichés.
for compactRésultat →
[1, 4, 9, 16]
[1, 4, 9, 16]
La compréhension (Séance 2) n’est rien d’autre que cette boucle, écrite en une ligne.
L’essentiel
Conditions : if / elif / else ; deux points : puis bloc indenté ; le premier test vrai gagne.
Boucle for : for element in collection: répète pour chaque élément ; range(n) répète n fois.
Accumulation : préparer une variable avant, la mettre à jour dans la boucle (somme, compteur).
enumerate : indice + valeur. zip : deux listes en parallèle.
Boucle while : while condition: tant que c’est vrai ; faire évoluer la condition.
break arrête la boucle ; continue passe au tour suivant.
: ou mal indenter un bloc : IndentationError.= (affecter) et == (comparer) dans un test.while sans progression vers la sortie : boucle infinie.continue arrête la boucle : il ne fait que sauter au tour suivant.Séance 4 — Fonctions, modules et robustesse
On sait décider et répéter. La Séance 4 apprend à organiser le code en fonctions réutilisables (def, paramètres, return), à importer des modules, à lire et écrire des fichiers, et à gérer les erreurs proprement avec try/except.
À faire d’ici là : refaire les cellules « À vous » du notebook de la séance.