Archives Wild Code School
Python

1.4 Python - Loops

Quête 5 sur 66 · 1 image archivée

Dans cette quête, on va continuer à progresser sur les boucles en Python, en les utilisant à travers plusieurs missions, contenu dans le challenge de cette quête.

Objectifs

✅ Manipuler des boucles for ✅ Manipuler des boucles while ✅ Savoir utiliser les instructions break et continue

Sommaire

L'importance des boucles

Les boucles sont importantes en programmation informatique, car elles permettent d'exécuter un bloc de code de manière répétée et autant de fois que nécessaire. Vous serez souvent confronté à des situations où vous aurez besoin d'utiliser un morceau de code à plusieurs reprises, mais vous ne voulez pas écrire la même ligne de code plusieurs fois. Par exemple, si un data analyst veut programmer un module d’analyse des rendements de tous les employés d’une entreprise. Le fait d’utiliser une boucle permet de généraliser les traitements à réaliser pour un seul employé sur tous les employés de l’entreprise.

Boucle conditionnelle while (tant que)

La boucle while permet de réaliser une suite d’instructions tant qu’une certaine condition est vraie.

python
while condition:
    instruction_1
    instruction_2
    ...
    instruction_n
# Fin de la boucle (la fin du bloc est délimitée par l'indentation)"
# Les instructions suivantes sont exécutées normalement

Le mécanisme de la boucle while commence par évaluer la condition. Deux cas sont possibles :

  • Si la condition est satisfaite, on exécute toutes les instructions du bloc indenté, ensuite on retourne au début de la boucle et on réévalue la condition initiale.
  • Sinon, on passe aux instructions situées après la boucle.

Voyons cela avec un exemple

python
number = 0
while number < 10 :
    number += 1 # Cette notation est équivalente à number = number + 1
    print(number)
print('fini !') 

Le code ci-dessus affiche tous les nombres entre 1 et 10, puis affiche 'fini !'. En effet :

  • À la ligne 2, tant que number < 10, on exécute les lignes 3 et 4 puis on retourne à la ligne 2. Au moment où la ligne 4 est exécutée pour la première fois, number vaut 1.
  • Après plusieurs passages dans la boucle, la ligne 3 va finir par rendre number égal à 10, puis l'affiche.
  • On remonte alors une dernière fois à la ligne 2 mais la condition number < 10 n’est plus vraie ! On saute donc directement à la ligne 5 (après la boucle).

Si le fonctionnement de la boucle while est suffisamment clair, essaie de répondre à ce quiz.

python
number = 1
while number <= 10:
    print(number, 'x 6 =', number * 6)
    number += 1 
quiz
false|||true|||false
# Qu’affiche le code ci dessus ?

[x] Table des multiplications de 6 par respectivement 1 jusqu’à 10
[x] Table de multiplication de 6 pour les nombres de 1 à 10

[] Le résultat de la multiplication de 6 par 1

[] Table des multiplications de 6 par respectivement 1 jusqu’à 11
[] Table de multiplication de 6 par les nombres de 1 à 11
Important

Pièges à éviter : boucle jamais exécutée

Il se peut très bien qu’à la première évaluation de la condition, celle-ci soit évaluée à False. Dans ce cas, on n’effectue jamais le corps de la boucle. Par exemple:

python
number = -1
while number >= 0:
    print("rien ne s'affiche...")
Important

Attention aux boucles infinies !

Attention, si la condition ne devient jamais égale à False, le bloc de code va boucler sans fin. Si cela vous arrive, cherche « comment interrompre un script Python » sur Google, car ça dépend de l'endroit où on le fait tourner. Par exemple:

python
while True:
    print('ce texte sera affiché encore et encore !')

ou encore :

python
number = 0
while number < 10:
    print('ce texte sera affiché encore et encore !')

Boucle itérative for (« pour tout... »)

En informatique, il arrive qu’on ait besoin d’effectuer les mêmes calculs avec une variable parcourant l’ensemble des entiers entre deux bornes (i.e. tous les entiers entre 0 et 100). C’est vrai qu’on pourrait utiliser une boucle while. Cependant, ce cas de figure est tellement fréquent qu’il existe un raccourci : la boucle itérative for.

Prenons l'exemple où on souhaite afficher tous les entiers entre 0 et 100. En utilisant la boucle while, on aurait :

python
number = 0
while number < 101: 
    print(number)
    number += 1

Une autre manière d'écrire ce code est l'utilisation des boucles for

python
for number in range(0,101):
    print(number)

Ne t'inquiètes pas, on verra dans la suite la manière d'utiliser la fonction range.

En Python la structure de la boucle for est la suivante :

python
for element in iterable:
    instruction 1
    instruction 2
    ...
    instruction N
# fin de la boucle itérative
# les instructions suivantes sont effectuées normalement

Un itérable est une structure qui fournit une séquence de valeurs. La syntaxe for element in iterable signifie que la variable element doit prendre successivement toutes les valeurs que fournit l’itérable. Ainsi, pour chacune de ces valeurs, on exécute les instructions du corps de la boucle.

Un itérable qu’on utilisera assez souvent est fourni par la fonction range (intervalle) qui crée une suite finie d’entiers. Voyons la syntaxe de ce range ! En considérant les paramètres : start (début), end (fin) et step (pas) de type entier, on peut appeler la fonction range de plusieurs manières différentes :

  • pour end > 0, range(fin) fournit tous les entiers entre 0 inclus et end exclue. Par exemple, range(3) permet de parcourir les valeurs 0, 1 et 2.

  • on peut décider de commencer à un autre entier que 0 en précisant un autre paramètre : pour start < end, range(start, end) fournit tous les entiers de start inclus à end exclue. Par exemple, range(1, 3) permet de parcourir les valeurs 1 et 2.

  • on peut aussi faire varier le pas : range(start, end, step). Par exemple, range(1, 5, 2) permet de parcourir les valeurs 1 et 3. Ou encore spécifier un pas négatif : range(5, 2, -2) permet de parcourir les valeurs 5 et 3.

Voyons si tout cela a été clair.

python
for number in range(4,-1,-2) :
    print(number)
quiz
false|||true|||false
# Qu’affiche le code ci dessus :
[x] 4, 2, 0
[] 4, 2
[] 4, 2, -1

En dehors des itérables range, il existe d’autres structures de données sur lesquelles on peut itérer, telles que les listes, les chaînes de caractères, les tuples… Vous allez voir ces structures avec plus de détails dans les prochaines quêtes.

Break et Continue

Dans une boucle (while ou for), l’instruction break interrompt la boucle instantanément : on sort de la boucle et on poursuit l’exécution du code situé après la boucle courante.

Tandis que l’instruction continue interrompt l’itération courante de la boucle, et passe directement à l’itération suivante, depuis le début de la boucle (pour une boucle while, on réévalue la condition, et pour une boucle for on passe à l'élément suivant)

python
for number in range(5):
 if number == 3:
  break
 print(number)

Ce programme affiche les nombres 0, 1 et 2. En effet, une fois que number est égal à 3 on sort de la boucle.

En changeant le break par le continue:

python
for number in range(5):
 if number == 3:
  continue
 print(number)

Dans ce cas, le code affiche tous les nombres de 0 à 4 à l'exception de 3 (on reste dans la boucle !)

On peut aussi utiliser le break et le continue dans des boucles imbriquées. Dans ce cas, c’est uniquement la boucle la plus proche contenant le break ou le continue qui est concernée.

Considérons l'exemple ci-dessous :

python
nombre = 0
while nombre < 15 : 
  print(nombre)
  nombre += 1
  if nombre == 5 : 
    break
  continue
  print(1 / 0)
print('fini')

Dans ce cas, on n'affiche que les nombres de 0 à 4. Lorqu'on atteint le nombre 5, on sort de la boucle grâce au break. D'un autre côté, tu peux remarquer qu'à la ligne 8 le print de 1 / 0 devrait induire une erreur de division par zéro (essaie de commenter la ligne 6 et tu verras !). Cependant, l'exécution de cette ligne est évitée grâce à l'instruction continue. Enfin, une fois qu'on est sortis de la boucle, on affiche 'fini'.

Les boucles imbriquées

Il est tout à fait possible d’imbriquer des boucles ou des instructions conditionnelles. Dans ce cas, le niveau d’indentation de chaque ligne permet à Python de savoir dans quel boucle on effectue le traitement.

Considérons l'exemple ci-dessous :

python
for i in range(1, 6):
  for j in range(1, i+1):
    print(j, end='')
  print()

Ce programme affiche une pyramide de nombres Image Alt

La boucle intérieure (faisant varier le j) permet d'afficher à chaque itération les nombres de 1 à i. Le fait d'utiliser un end = ' ' permet pour chaque itération d'afficher ces nombres sur une même ligne séparés par une espace.

Ressources

↗
Les boucles while et for sur Python : à partir de 5min55
youtu.be
↗
Boucles imbriquées
youtu.be

Challenge

Tu veux devenir expert dans la manipulation des boucles Python ? Passons à la pratique !

Dans ce challenge, tu vas t'exercer à utiliser diverses boucles for et while. Essaie de choisir le type de boucle le plus adéquat de telle sorte à simplifier ton code.

Crée une copie du notebook ci-après et réalise les missions qui s'y trouvent : 1.4 Python - Loops Une fois réalisé, poste le lien vers ton notebook en commentaire pour validation, sans oublier de le rendre accessible en lecture pour toute personne disposant du lien.

Critères de validation

  • Le fichier en lien est consultable
  • Toutes les questions sont résolues

Une solution ici

Ressources partagées sur cette quête