Les boucles
Objectifs de la section
2-4 Traitements conditionnels et répétés
Temps requis
60 minutes
Le traitement d'ensembles de données demande souvent d'appliquer un traitement spécifique à chaque entrée de ce jeu de données. Plutôt que de répliquer (copier-coller odieusement) le traitement dans le code, on forme un bloc d'instructions que l'on exécute plusieurs fois, chaque fois sur une entrée différente. Un autre usage fréquent des traitements répétitifs est pour la réalisation de méthodes de calcul numérique; plusieurs méthodes sont itératives : à chaque étape, on converge souvent légèrement plus vers la solution. Finalement, simplement pour interagir avec la personne utilisatrice, on utilise aussi souvent des traitements répétés : recommencer un traitement tant qu'il y a une erreur par exemple.
On appelle boucle les instructions qui permettent de répéter un traitement plusieurs fois. On trouve deux types de boucles :
- La boucle tant que (
while
): s'exécute tant qu'une condition est évaluée à vraie. On ne connait pas nécessairement le nombre d'itérations de la boucle; - La boucle pour (
for
) : s'exécute pour un nombre déterminé d'itérations.
Dans les deux cas, il est important dans l'écriture du programme de s'assurer que les boucles s'arrêtent à un moment donné (que la condition d'arrêt est atteinte), autrement le programme exécutera toujours le même bloc d'instruction et sera pris à cet endroit.
La boucle while
Sections 5.0 à 5.2
La syntaxe de la boucle while
est la suivante :
Structure de la boucle while | |
---|---|
Indentation dans les boucles
Comme pour les instructions conditionnelles, l'indentation devant les instructions après la déclaration de la boucle indique quelles instructions doivent être répétées.
Par exemple, on souhaite qu'une personne saisisse un nombre positif à la console. On lui demande donc un nombre tant que celui-ci ne satisfait pas la contrainte.
Inversion de la condition
Plusieurs auraient une tendance naturelle à utiliser nombre > 0
comme condition dans le while
, mais on veut écrire le code de façon à ce que la vérification de la condition (test logique retourne vrai), entraîne l'exécution du code, d'où pourquoi on « inverse » la façon de penser le problème. C'est ce que l'on appelle une clause de garde : sa vérification empêche le programme de poursuivre tant que les données ne sont pas valides. Elle est la gardienne de l'intégrité du programme.
La boucle while
peut aussi être utilisée pour compter jusqu'à une certaine valeur, par exemple afficher les carrés des nombres entre 1 et 10. La boucle for
conviendra souvent, mais systématiquement, à ces cas de figure.
Instruction +=
L'instruction +=
est simplement une forme abrégée de x = x + ...
. Des instructions similaires existent pour les autres opérations arithématiques.
La boucle for
Sections 6.0 à 6.2
La syntaxe de la boucle for
est un peu plus complexe, car il faut définir un compteur pour déterminer le nombre d'itérations à faire. Cette boucle se compose de 2 morceaux (au lieu d'une unique condition dans le cas de la boucle while
).
- Un compteur de la boucle
- Une séquence à parcourir, souvent générée par la fonction
range
Structure de la boucle for | |
---|---|
Voici la spécification de la fonction range
qui génère une séquence de nombres sur laquelle exécuter la boucle.
Paramètre | Type | Description |
---|---|---|
init | Entier | La valeur initiale de la séquence (inclue) |
limite | Entier | La valeur maximale de la séquence (exclue) |
pas | Entier | L'intervalle entre chaque élément de la séquence |
Retour | Séquence | Une représentation de la séquence à parcourir. |
La variable compteur (qu'on appelle souvent simplement i) déclarée dans la boucle contient la valeur courante du compteur. Voici quelques exemples de boucles for
:
Raccourcis d'écriture de la fonction range
La fonction py range
définie certains de ses paramètres par défaut, ce qui signifie que si l'on omet des paramètres, alors Python lui assigne automatiquement une valeur.
Par défaut, le pas vaut 1. Les deux appels ci-dessous sont équivalents.
On peut reprendre l'affiche des carrés des nombres de 1 à 10 avec une boucle for
pour comparer les deux syntaxes. Ici la syntaxe avec une boucle for
est plus courte, mais ce n'est pas toujours le cas.
La fonction arange
Section 6.3
La fonction arange
définit dans numpy
permet de générée une séquence, mais avec des nombres à virgule au lieu d'être limité à des entiers. La spécification de la fonction est la suivante.
Paramètre | Type | Description |
---|---|---|
init | Nombre à virgule | La valeur initiale de la séquence (inclue) |
limite | Nombre à virgule | La valeur maximale de la séquence (exclue) |
pas | Nombre à virgule | L'intervalle entre chaque élément de la séquence |
Retour | Séquence | Une représentation de la séquence à parcourir. |
Voici quelques exemples de la fonction arange
.
La fonction linspace
Section 6.4
La fonction linspace
permet d'obtenir aussi une séquence de nombres à virgule, mais utilise une approche différente de la fonction arange
, ce qui réduit les erreurs d'arrondit. Plutôt que de définir un pas, la fonction linspace
prend en compte le nombre total d'éléments dans la séquence générée. La division se fait de façon linéaire (d'où le nom « espace linéaire »). De plus, la borne supérieure est toujours l'un des éléments de la séquence.
Paramètre | Type | Description |
---|---|---|
init | Nombre à virgule | La valeur initiale de la séquence (inclue) |
limite | Nombre à virgule | La valeur maximale de la séquence (inclue) |
Nombre d'éléments | Entier | Le nombre d'éléments dans la séquence |
Retour | Séquence | Une représentation de la séquence à parcourir. |
Voici quelques exemples de la fonction linspace
.
Pourquoi il y a plus d'erreurs d'arrondis avec arange qu'avec linspace ?
Pour répondre à cette question, écrivons un comportement équivalent aux deux fonctions avec une boucle while.
Boucle équivalente à arange | |
---|---|
On voit que le traitement différent explique la présence moins fréquente des erreurs d'arrondis. Toutefois, la fonction linspace
est généralement un peu plus lente que la fonction arange
pour cette raison.
Exercices
Boucle while
Page 94 et suivantes
Recommandés : 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.10 et 5.24 Supplémentaires : 5.9, 5.12 et 5.23
Boucle for
Page 94 et suivantes
Recommandés : 6.1, 6.2, 6.4, 6.7 (attention à ne pas prendre de trop grandes valeurs !), 6.8 et 6.11 Supplémentaires : 6.9, 6.10