đ Boucles
- while
- Affectation
- range / for
- Structures combinées
- break / continue / pass
- DRY
- Boucles imbriquées
- input()
- Trace
- Activités
La boucle apporte à la programmation une puissance considérable.
Elle permet de répéter des actions, de parcourir des listes, de traiter des données
de maniĂšre efficace.
Elle est un des piliers de la programmation avec les conditions et les fonctions.
En gros, sa structure est la suivante :
Tant que (une certaine condition est vraie) :
# instructions à répéter
# instructions à répéter
# instructions à répéter
Si on exécutait ce pseudo-code, on répéterait l'exécution des lignes 2 à 4 tant que la condition de la ligne 1 est vraie.
DÚs que la condition devient fausse, on sort de la boucle et on continue l'exécution du programme à la ligne 5.
En Python, on utilise le mot-clé while pour créer une boucle de ce type.
Voici un exemple simple :
compteur = 0
while compteur < 5:
print("Compteur =", compteur)
compteur = compteur + 1 # Incrémente le compteur de 1
print("Fin de la boucle")
Dans cet exemple, la boucle while continue tant que la variable compteur est inférieure à 5, c'est-à -dire tant que l'expression compteur < 5 est évaluée à True.
à chaque itération (tour de la boucle), elle affiche la valeur du compteur (ligne 3) et l'incrémente de 1 (ligne 4).
Quand compteur atteint 5, la condition (compteur < 5) devient fausse (False) et la boucle se termine.
Exécutez ce code en mode débogage pour bien comprendre son fonctionnement.
Mettez un point d'arrĂȘt sur la ligne 1 et avancez une ligne Ă la fois pour suivre l'Ă©volution de la variable compteur.
Il est crucial de s'assurer que la condition de la boucle deviendra fausse à un moment donné.
Sinon, la boucle continuera indéfiniment, ce qui peut faire planter votre programme.
Dans l'exemple ci-dessus, si on oublie d'incrĂ©menter compteur, la condition compteur < 5 restera toujours vraie et la boucle ne s'arrĂȘtera jamais.
Pour incrémenter une variable, on peut utiliser l'opérateur d'affectation raccourcie +=.
Par exemple, au lieu d'écrire compteur = compteur + 1, on peut écrire compteur += 1.
Cela fonctionne de la mĂȘme maniĂšre pour les autres opĂ©rations mathĂ©matiques avec les opĂ©rateurs -=, *=, /=, etc.
Voici le mĂȘme exemple avec l'opĂ©rateur += :
compteur = 0
while compteur < 5:
print("Compteur =", compteur)
compteur += 1 # Incrémente le compteur de 1
print("Fin de la boucle")
Voici un autre exemple qui utilise une boucle while pour calculer la somme des nombres de 1 Ă 10 :
somme = 0
nombre = 1
while nombre <= 10:
somme += nombre # Ajoute le nombre courant Ă la somme
nombre += 1 # Passe au nombre suivant
print("La somme des nombres de 1 Ă 10 est :", somme)
Dans cet exemple, la boucle continue tant que nombre est inférieur ou égal à 10 (nombre <= 10).
à chaque itération, elle ajoute la valeur de nombre à somme et incrémente nombre de 1.
Quand nombre devient 11, la condition nombre <= 10 devient fausse et la boucle se termine.
Le programme affiche alors la somme totale des nombres de 1 Ă 10.
Exécutez-le en mode débogage pour suivre l'évolution des variables somme et nombre à chaque itération!
Les explications de cette section étaient-elles claires ?
Nous avons déjà vu l'opérateur d'affectation = qui permet d'affecter une valeur à une variable.
Par exemple :
x = 5
y = 10
Python propose Ă©galement des opĂ©rateurs d'affectation composĂ©s qui permettent de faire des opĂ©rations mathĂ©matiques et de rĂ©affecter le rĂ©sultat Ă la mĂȘme variable en une seule instruction.
Voici les opérateurs d'affectation composés les plus courants :
| OpĂ©rateur | Description | Exemple | Ăquivalent Ă |
|---|---|---|---|
| += | Addition et affectation | a += b | a = a + b |
| -= | Soustraction et affectation | a -= b | a = a - b |
| *= | Multiplication et affectation | a *= b | a = a * b |
| /= | Division et affectation | a /= b | a = a / b |
| %= | Modulo et affectation | a %= b | a = a % b |
| //= | Division entiĂšre et affectation | a //= b | a = a // b |
| **= | Exponentiation et affectation | a **= b | a = a ** b |
Ces opérateurs sont trÚs utiles pour simplifier le code et rendre les opérations plus concises.
compteur = 0
compteur += 1 # équivalent à compteur = compteur + 1
compteur *= 2 # équivalent à compteur = compteur * 2
print(compteur) # Affiche 2
Les explications de cette section étaient-elles claires ?
range()range() génÚre une séquence de nombres. Il existe 3 façons de l'appeler selon le nombre de paramÚtres :
range(stop): part de0, avance de1en1, s'arrĂȘte avantstoprange(start, stop): part destart, avance de1en1, s'arrĂȘte avantstoprange(start, stop, step): part destart, avance destepenstep, s'arrĂȘte avantstop
| Appel | Produit les nombres |
|---|---|
| range(5) | 0, 1, 2, 3, 4 |
| range(1, 5) | 1, 2, 3, 4 |
| range(0, 11, 2) | 0, 2, 4, 6, 8, 10 |
| range(5, 0, -1) | 5, 4, 3, 2, 1 |
â ïž range() n'est pas exactement une liste en Python, mais elle se comporte de la mĂȘme façon lorsqu'on la parcourt.
for avec range()La boucle for parcourt une séquence de valeurs une par une, et exécute les instructions du bloc à chaque itération (à chaque tour de boucle).
Sa structure est la suivante :
for i in range(start, stop, step):
# instructions répétées à chaque itération
à chaque itération de boucle, i prend automatiquement la valeur suivante dans la séquence produite par range().
La boucle for est un cas particulier de while. Elle est simplement plus pratique quand on sait d'avance combien de tours on veut faire.
Voici quatre exemples, lisez d'abord le commentaire, puis le code :
# Exemple 1 : i vaut 0, puis 1, puis 2, puis 3, puis 4 â 5 tours
for i in range(5):
print(i)
# Exemple 2 : i commence Ă 1 et s'arrĂȘte avant 6 â affiche 1 Ă 5
for i in range(1, 6):
print(i)
# Exemple 3 : i avance de 2 en 2 â affiche seulement les pairs
for i in range(0, 11, 2):
print(i)
# Exemple 4 : step nĂ©gatif â i descend de 5 jusqu'Ă 1
for i in range(5, 0, -1):
print(i)
đ ExĂ©cutez ces exemples en mode dĂ©bogage, un Ă la fois.
Mettez un point d'arrĂȘt sur le for et avancez ligne par ligne pour voir i changer de valeur Ă chaque itĂ©ration.
for, range() et len()Puisque range() produit une sĂ©quence d'index (0, 1, 2âŠ), on peut l'utiliser pour accĂ©der Ă chaque Ă©lĂ©ment d'une liste tour par itĂ©ration.
len(liste) retourne le nombre d'éléments d'une liste. Donc range(len(liste)) génÚre exactement les bons index pour parcourir toute la liste :
consoles = ["PS5", "Xbox Series X", "Nintendo Switch 2"]
nb_elements = len(consoles) # nb_elements vaut 3
for i in range(nb_elements): # i prendra les valeurs 0, 1, 2
print(consoles[i]) # accÚde à l'élément à la position i
# On aurait pu écrire directement :
# for i in range(len(consoles)):
Au 1er tour : i vaut 0 â consoles[0] â "PS5"
Au 2e tour  : i vaut 1 â consoles[1] â "Xbox Series X"
Au 3e tour  : i vaut 2 â consoles[2] â "Nintendo Switch 2"
đ ExĂ©cutez ce code en mode dĂ©bogage et observez i et consoles[i] Ă©voluer ensemble Ă chaque itĂ©ration.
i : utiliser _Parfois, on veut simplement répéter une action un certain nombre de fois, sans jamais utiliser la valeur de i à l'intérieur de la boucle.
Par exemple, afficher 5 fois le mĂȘme message :
for i in range(5):
print("Bienvenue!") # i n'est pas utilisé
Dans ce cas, nommer la variable i est trompeur : ça laisse croire qu'on va s'en servir, alors qu'on ne l'utilise pas.
La convention en Python est d'utiliser _ (un tiret bas) pour signaler explicitement que la variable est intentionnellement ignorée :
for _ in range(5):
print("Bienvenue!") # on répÚte 5 fois, la valeur du tour ne nous intéresse pas
Le résultat est identique, mais _ communique clairement l'intention : "je n'ai pas besoin de savoir à quel tour je suis, je veux juste répéter."
đ RĂšgle simple : si on utilise la variable de boucle dans le bloc (consoles[i], i * 2, etc.), on la nomme i. Si on ne l'utilise jamais, on utilise _.
for ou while? Savoir choisirLa rĂšgle est simple : for quand on connaĂźt le nombre de tours d'avance, while quand on ne le connaĂźt pas.
On utilise un for quand le nombre d'itérations est connu ou calculable avant d'entrer dans la boucle :
- Afficher les 12 mois de l'annĂ©e â on sait qu'il y en a exactement 12.
- Parcourir une liste de 30 Ă©tudiants â
len(liste)nous donne le compte d'avance. - Calculer la table de multiplication de 7 (de 1 Ă 10) â exactement 10 tours.
- RĂ©pĂ©ter une action 5 fois â le nombre est fixĂ© d'avance.
On n'a pas le choix d'utiliser un while quand le nombre d'itérations dépend de quelque chose qui survient pendant l'exécution, donc impossible à connaßtre d'avance :
- Redemander un mot de passe tant qu'il est incorrect â l'utilisateur pourrait le rĂ©ussir au 1er essai... ou au 50e. Impossible Ă prĂ©voir.
- GĂ©nĂ©rer des nombres alĂ©atoires jusqu'Ă tomber sur un 6 â ça pourrait arriver tout de suite ou prendre des dizaines de tours.
- Continuer une partie tant que le joueur n'a pas perdu â on ne sait pas combien de tours durera la partie.
- Lire des donnĂ©es tant qu'il en reste Ă lire â le nombre dĂ©pend du contenu du fichier.
đ Le test mental : « Est-ce que je peux Ă©crire le nombre de tours sur un papier AVANT de lancer la boucle? » Si oui â for. Si non â while.
Les explications de cette section étaient-elles claires ?