Les boucles
Cours
La répétition en informatique
Un des avantages en informatique est qu’il est possible de traiter un nombre conséquent d’informations en un temps réduit. Ce traitement est souvent le même, mais avec des données différentes.
Imaginez demander à un scientifique de saisir son relevé quotidien de CO2 en prenant en compte que ce relevé ne doit pas être négatif. Donc tant que le relevé fourni est négatif, il faut redemander une nouvelle valeur à l’utilisateur.
releve_co2 = int(input("Entrez le niveau de CO2 relevé: "))
if releve_co2 < 0:
print("Le niveau de CO2 ne peut être négatif.")
releve_co2 = int(input("Entrez le niveau de CO2 relevé: "))
if releve_co2 < 0:
print("Le niveau de CO2 ne peut être négatif.")
releve_co2 = int(input("Entrez le niveau de CO2 relevé: "))
if releve_co2 < 0:
print("Le niveau de CO2 ne peut être négatif.")
#...
Sans structure de répétition, cette imbrication de if
à l’infini peut être sans fin.
Boucle while
- La boucle
while
est utile pour exécuter des itérations lorsque le nombre de répétitions nécessaires des instructions reste indéterminé. - Comme pour le
if
:- la condition est très souvent une opération de comparaison.
- les : sont primordiaux.
- c’est l’indentation (le décalage par rapport à la marge gauche) qui délimite le bloc d’instructions.
- En revanche, il faut une condition de sortie pour éviter une boucle infinie.
Reprenons l’exemple vu en début du chapitre et adaptons le pour boucler sur le relevé qui ne peut être négatif:
releve_co2 = int(input("Entrez le niveau de CO2 relevé: "))
while releve_co2 < 0:
print("Le niveau de CO2 ne peut être négatif.")
releve_co2 = int(input("Entrez le niveau de CO2 relevé: "))
print("Le niveau de CO2 relevé est de : ", releve_co2)
La boucle while
répète les instructions tant que une certaine condition est remplie. La condition de bouclage prend exactement la même forme que les conditions avec l’instruction if
. Vous pouvez donc créer des conditions complexes pour sortir de la boucle.
Par exemple: modifier la condition pour autoriser seulement les relevés de CO2 entre 0 et 1000.
# Saisie du relevé par l'utilisateur
releve_co2 = int(input("Entrez le niveau de CO2 relevé: "))
# Boucle sur la valeur saisie.
while releve_co2 < 0 or releve_co2 > 1000:
print("Un relevé de CO2 ne peut être négatif, ou supérieur à 1000")
releve_co2 = int(input("Entrez le niveau de CO2 relevé: "))
print("Le niveau de CO2 relevé est de : ", releve_co2)
Boucle infinie
Une boucle infinie consiste à n’avoir aucune condition qui permet de sortir de cette boucle.
# Boucle sans la condition de sortie
nombre = 10
while nombre > 0:
print(nombre)
10
10
10
10
10
10
...
Pour sortir d’une boucle infinie, il faut cliquer sur le bouton “arrêt” de la cellule:
Comment résoudre ce problème? En utilisant tout simplement une décrémentation de ma variable (ma variable - 1). Cela fonctionnera comme un compteur.
# Boucle avec la condition de sortie
nombre = 10
while nombre > 0:
print(nombre)
nombre = nombre - 1
10
9
8
7
6
5
4
3
2
1
Le programme prend fin une fois la condition remplie (lorsque nombre
sera égal à 0 dans notre exemple.)
L’instruction break
L’instruction break
permet d’arrêter un programme pour éviter une boucle infinie.
# Exemple : demander un mot de passe jusqu'à ce qu'il soit correct.
mot_de_passe_correct = "Python123"
while True:
mot_de_passe = str(input("Entrez le mot de passe : "))
if mot_de_passe == mot_de_passe_correct:
print("Accès autorisé.")
break # Sort de la boucle car le mot de passe est correct
else:
print("Mot de passe incorrect. Réessayez.")
Atelier 1
Atelier sur les boucles - partie 1
!!! PAUSE 5 MINUTES !!!
Boucle for
- La boucle
for
se révèle utile pour exécuter des itérations dont le nombre de répétitions est connu à l’avance. - La boucle
for
est basée sur une variable d’itération (lei
). - Cette variable peut être utilisée dans les instructions de la boucle.
- Cette variable prend les valeurs générées par l’instruction
range()
.
L’instruction range
range
est une instruction qui permet de générer une suite de nombre avec lesquels nous allons faire nos répétitions.
La forme générale de la fonction est : range(début, fin, pas)
Si 1 seul paramètre est spécifié, il s’agit du paramètre fin
. Dans ce cas début = 0
et pas = 1
.
for i in range(5):
print(i)
0
1
2
3
4
Si 2 paramètres sont spécifiés, il s’agit des paramètres début
et fin
. Dans ce cas pas = 1
.
for i in range(4, 10):
print(i)
4
5
6
7
8
9
Notez que le nombre 10 ne s’affiche pas. Dans le cas d’un range, le paramètre de fin
est exclu.
Le programme affiche les nombres de 4 à 10 non inclus.
Si 3 paramètres sont spécifiés, il s’agit des paramètres début
, fin
et pas
.
for i in range(2, 70, 10)
print(i)
2
12
22
32
42
52
62
Affichage sur la même ligne
Par défaut, la fonction print()
ajoute une nouvelle ligne après chaque affichage. On peut changer ce comportement avec le mot clé end
.
Voici quelques cas où l’utilisation de end
peut être utile :
- Éviter les nouvelles lignes :
En utilisant end=""
, on peut éviter cela et continuer l’affichage sur la même ligne.
i = 0
while i < 5:
print(i, end="")
i = i + 1
Cela affichera : 0 1 2 3 4
sur une seule ligne.
- Ajouter un séparateur personnalisé :
On peut utiliser end
pour ajouter un séparateur personnalisé entre les éléments imprimés. Par exemple, pour ajouter une virgule et un espace :
i = 0
while i < 5:
print(i, end=", ")
i = i + 1
Cela affichera : 0, 1, 2, 3, 4,
.
Imbrication de boucles
Une instruction de bouclage reste une instruction comme les autres, on peut les enchainer les unes dans les autres.
Que fait le code suivant ?
cote = 3
for i in range(cote):
for j in range(cote):
print("#", end="")
print("")
En règle générale, il est rare d’avoir plus de 3 boucles imbriquées. Si c’est le cas pour résoudre un algorithme, il y a probablement un problème de logique dans la conception de votre solution.
Remarque du jour
90% de temps d’exécution d’un programme se passe dans 10% du code.
Il y a seulement quelques boucles responsables de la majeure partie du temps de calcul d’un programme. C’est en optimisant ces boucles que vous gagnerez en performance.
Atelier
Atelier 1
Atelier sur les boucles - partie 1
Atelier 2
Atelier sur les boucles - partie 2