Boucles conditionnelles#
Qu'est-ce qu'une boucle conditionnelle ?#
Dans un programme, certaines instructions doivent s'exécuter plusieurs fois. Imaginez un programme dans lequel l'utilisateur doit entrer son mot de passe pour se connecter. Ici, l'instruction print("Mot de pas incorrect")
doit être potentiellement exécutée plusieurs fois tant que l'utilisateur entre un mauvais mot de passe. C'est une boucle conditionnelle qui nous permettra de répéter des instructions de cette manière. Grâce à celle-ci, un bloc d'instructions peut être répété en boucle tant qu'une condition est respectée.
En pseudocode, l'exemple du programme de connexion avec une boucle conditionnelle pourrait donc s'écrire de la manière suivante :
1Demander le mot de passe à l'utilisateur et le stocker dans la variable mdp
2Tant que mdp est différent de "Fr1B0urg"
3 Afficher "Mot de passe incorrect"
4 Redemander le mot de passe et le stocker dans mdp
5Afficher "Connexion réussie"
Dans ce pseudocode, quand l'exécution arrive à la ligne 2, la condition est évaluée pour déterminer si l'on entre dans la boucle ou non. Dans le cas où le résultat de la condition est vrai (c'est-à-dire que le mot de passe est incorrect), on entre dans la boucle. Cela signifie que le bloc d'instruction indenté en dessous est exécuté. Au terme de l'exécution de ce bloc, on remonte à la ligne 2 pour réévaluer la condition. Si elle est vraie, on entre à nouveau dans la boucle et le bloc d'instruction indenté est réexécuté. Lorsqu'en revanche la condition de la ligne 2 est fausse, le bloc indenté est ignoré et la ligne 5 est exécutée.
La boucle while#
En Python, une boucle conditionnelle s'écrit avec le mot-clef while
(littéralement tant que). Ce mot-clef est suivi d'une condition qui détermine si l'on entre dans la boucle (quand la condition est True
) ou si on en sort (quand la condition est False
). Quand on entre dans la boucle, le bloc d'instructions indenté sous le while
est exécuté. Au terme de cette exécution, on remonte à la ligne du while
et la condition est réévaluée pour déterminer si l'on entre à nouveau dans la boucle ou non.
L'exemple du programme de connexion décrit précédemment en pseudocode peut alors s'écrire de la manière suivante.
1mdp = input("Entrez le mot de passe")
2while mdp != "Fr1B0urg" :
3 print("Mot de passe incorrect")
4 mdp = input("Entrez à nouveau le mot de passe")
5print("Mot de passe correct")
Le boucle while
peut également être utilisée pour répéter un bloc d'instructions un nombre déterminé de fois, comme dans le programme ci-dessous qui permet de compter jusqu'à 10.
1compteur = 1
2while compteur <= 10 :
3 print(compteur)
4 compteur += 1
Exercices#
Exercice 33#
Sans les exécuter, lisez attentivement les programmes ci-dessous. Leur seule différence est le if
ou while
de la ligne 3. Quel sera l'affichage de chacun de ses programmes ? Quelle est la différence entre un if
et un while
?
n = 5
if n < 10:
n += 1
print(n)
n = 5
while n < 10:
n += 1
print(n)
Solution
Comme le premier programme utilise un if
, le bloc d'instruction indenté en dessous n'est exécuté qu'une seule fois. Ce programme affichera simplement 6
. Dans le 2ème programme, l'exécution revient à la ligne du while après avoir exécuté une première fois le bloc indenté en dessous et réévalue l'expression conditionnelle. Le bloc est donc exécuté en boucle tant que n
est plus petit que 10
. Ainsi, ce programme affiche 6, puis 7, puis 8, puis 9, puis 10. Si cela n'est pas clair pour vous, suivez le programme en complétant un tableau d'état pour vous convaincre de cet affichage.
Exercice 34#
Etablissez le tableau d'état du programme suivant.
x = 0
y = 20
while x < y:
y -= x * 2
x = x + 2
x += 1
Solution
Tableau d'état :
x |
y |
---|---|
0 |
|
0 |
20 |
0 |
20 |
2 |
20 |
2 |
16 |
4 |
16 |
4 |
8 |
6 |
8 |
6 |
-4 |
8 |
-4 |
9 |
-4 |
Exercice 35#
Etablissez le tableau d'état du programme suivant.
n = 30
x = 0
while n != 20:
n -= 2
if n < 26:
x += 2
else:
x -= 1
x = x * 2
Solution
n |
x |
---|---|
30 |
|
30 |
0 |
28 |
0 |
28 |
-1 |
28 |
-2 |
26 |
-2 |
26 |
-3 |
26 |
-6 |
24 |
-6 |
24 |
-4 |
24 |
-8 |
22 |
-8 |
22 |
-6 |
22 |
-12 |
20 |
-12 |
20 |
-10 |
20 |
-20 |
Exercice 36#
Écrivez un programme utilisant seulement 2 instructions
print()
affichant un compte à rebours de 100 jusqu'à 0. L'exécution du programme ressemblera à ceci :
100
99
98
...
2
1
0
BOOM
#Ecrivez votre code ici
Complétez le programme précédent avec un
if ... else ...
dans lewhile
de manière qu'à chaque fois qu'un nombre inférieur à 10 est affiché, le texte"FUYEZ !"
le suive :
100
99
98
...
2 FUYEZ
1 FUYEZ
0 FUYEZ
BOOM
Solution
1compte_a_rebours = 1000
2while compte_a_rebours >= 0:
3 print(compte_a_rebours)
4 compte_a_rebours -= 1
5print("BOOM")
1compte_a_rebours = 1000
2while compte_a_rebours >= 0:
3 if compte_a_rebours < 10:
4 print(compte_a_rebours, "FUYEZ !")
5 else:
6 print(compte_a_rebours)
7 compte_a_rebours -= 1
8print("BOOM")
Exercice 37#
Écrivez un programme dans lequel l'utilisateur peut choisir un nombre pour lequel il souhaite voir apparaître sa table de multiplication. Un message d'au revoir sera également affiché à la fin. Votre programme ne doit utiliser que une seule instruction print()
. Un exemple d'exécution pourrait être le suivant :
Quelle table de multiplication voulez-vous voir ? <--- [4]
1x4 = 4
2x4 = 8
3x4 = 12
...
10x4 = 40
#Ecrivez votre code ici
Solution
Il y a deux manières différentes pour résoudre ce problème. Toutefois, à moins d'être très à l'aise, je vous conseille de rester sur la première solution, car la 2ème est moins intuitive.
1n = int(input("Quelle table de multiplication voulez-vous voir ?"))
2multiplicateur = 1
3while multiplicateur <= 10:
4 print(multiplicateur, "*", n, "=", multiplicateur * n)
5 multiplicateur += 1
1n = int(input("Quelle table de multiplication voulez-vous voir ?"))
2nombre_de_base = n
3compteur = 0
4while compteur < 10:
5 compteur += 1
6 print(compteur, "*", nombre_de_base, "=", n)
7 n += nombre_de_base
Exercice 38#
Écrivez un programme dans lequel l'utilisateur peut consécutivement entrer les notes qu'il a faites dans une branche. À la fin, le programme affichera le nombre de notes insuffisantes qui ont été entrées. Les notes invalides seront simplement ignorées. Pour terminer le programme, l'utilisateur entrera la note 99
. Un exemple d'exécution peut être le suivant.
Entrez une note : 4.5
Entrez une note : 3.4
Entrez une note : 6
Entrez une note : 3.9
Entrez une note : 5.1
Entrez une note : 99
Vous avez fait 2 notes insuffisantes
#Ecrivez votre code ici
Solution
1nb_notes_insuf = 0
2note = 0
3while note != 99:
4 note = float(input("Entrez une note"))
5 if note >= 1 and note < 4:
6 nb_notes_insuf += 1
7print("Vous avez fait", nb_notes_insuf, "notes insuffisantes")
Exercice 39#
Ecrivez un programme correspondant à une mini machine à calculer. Dans celle-ci, l'utilisateur pourra choisir de faire une addition, soustraction ou multiplication entre 2 nombres. Le programme demandera alors à l'utilisateur quel type d'opération il souhaite faire, avant de lui demander les 2 nombres à utiliser. Le programme demandera à l'utilisateur des opérations à faire en boucle, jusqu'à ce que celui-ci écrive "STOP". Un exemple d'utilisation est donné ci-dessous.
Bienvenue dans la mini calculatrice !
Quelle opération souhaitez-vous effectuer ?addition
Quel est le premier nombre ?4
Quel est le deuxième nombre ?7
Le résultat de 4 + 7 est 11
Quelle opération souhaitez-vous effectuer ?multiplication
Quel est le premier nombre ?9
Quel est le deuxième nombre ?11
Le résultat de 9 * 11 est 99
Quelle opération souhaitez-vous effectuer ?STOP
Au revoir !
#Ecrivez votre code ici
Solution
1print("Bienvenue dans la mini calculatrice !")
2operation = ""
3while operation != "STOP":
4 operation = input("Quelle opération souhaitez-vous effectuer ?")
5 if operation == "STOP":
6 print("Au revoir !")
7 else:
8 nombre1 = float(input("Quel est le premier nombre ?"))
9 nombre2 = float(input("Quel est le deuxième nombre ?"))
10 if operation == "addition":
11 resultat = nombre1 + nombre2
12 print("Le résultat de", nombre1, "+", nombre2, "est", resultat)
13 elif operation == "soustraction":
14 resultat = nombre1 - nombre2
15 print("Le résultat de", nombre1, "-", nombre2, "est", resultat)
16 elif operation == "multiplication":
17 resultat = nombre1 * nombre2
18 print("Le résultat de", nombre1, "*", nombre2, "est", resultat)
19 else:
20 print("Opération non reconnue")