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
...
Astuces

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 (le i).
  • 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
Attention

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 :

  1. É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.

  1. 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("")
Attention

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

Info

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

Atelier 3

Atelier sur les boucles - contexte scientifique