- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte personlive_helpToutes les questions
Aurelien Morganti
15 janvier 2023 - 15 janvier 2023 à 12:29
boucle while
La boucle while
Avant de vous montrer en détail le fonctionnement de la boucle while
, je tiens à préciser que la boucle for
, comme la boucle while
, permet généralement de réaliser le même type d'opérations. C'est vraiment juste leur façon de fonctionner qui est différente.
Syntaxe d'une boucle while
La syntaxe d'une boucle while
est la suivante :
while condition:
print("Bonjour")
À la différence de la boucle for
qui demandait une structure de données, comme une liste ou même une chaîne de caractères, la boucle while
va s'exécuter tant qu'une condition est vraie.
Dans la partie précédente, on a utilisé une boucle for
pour répéter une opération dix mille fois.
for i in range(10000):
print("Bonjour")
Mais vous êtes d'accord que ça paraît un peu bizarre, car au final, on crée une liste de dix mille nombres avec la fonction range
, mais on n'utilise pas vraiment cette liste directement. C'est juste un moyen d'exécuter une action un certain nombre de fois.
Donc on peut, à la place d'une boucle for
, utiliser pour se faire une boucle while
qui va fonctionner exactement de la même façon, mais avec une logique différente.
i = 0
while i < 10000:
print("Bonjour")
i += 1
À la place de passer à travers une liste, on va donc exécuter la boucle tant que la condition qu'on indique à while
est vérifiée.
👉 On initialise donc une variable i
qui est égale à 0
👉 On indique à while
qu'on veut exécuter la boucle, tant que i
est strictement inférieur à 10000
👉 À l'intérieur de la boucle, on incrémente i
de 1 en même temps qu'on print
le mot "Bonjour"
On va donc afficher dix mille fois "Bonjour", car lors des dix mille premières itérations, i
sera bien plus petit que 10000, et c'est uniquement quand i
va atteindre la valeur de 10000, que la condition i
strictement inférieur à 10000 sera fausse, et qu'on va donc sortir de la boucle.
Donc au final, vous voyez que ces deux boucles sont équivalentes, c'est juste la méthode qui change.
Les boucles while
sont très pratiques, mais sont aussi très dangereuses.
Avec une boucle for
, on passe à travers une structure de données d'une taille déterminée. On ne peut en effet pas créer une liste qui contiendrait des valeurs à l'infini. La liste est donc d'une taille définie dès le départ.
En revanche, si elle est mal utilisée, la boucle while
peut aboutir sur ce qu'on appelle une boucle infinie.
Exemples de boucles infinies
i = 0
while i < 10000:
print("Bonjour")
Vous voyez ici que j'ai enlevé la ligne de code qui incrémentait la variable i
à chaque itération. i
sera donc toujours égal à 0, et la condition i
plus petit que 10000 sera vraie. Le script va donc afficher le mot "Bonjour" à l'infini, ce qui aura pour conséquence de faire planter votre script, voire votre ordinateur, puisque le script ne s'arrêtera jamais et va exécuter des milliers d'opérations à la seconde.
Cependant, dans certains cas de figure, on ne sait pas d'avance combien de fois une opération peut être répétée. Dans ce cas-ci, la boucle while
a son intérêt.
Imaginez un script dans lequel vous demandez à l'utilisateur, à chaque itération de la boucle, s'il veut continuer l'opération. Dans un cas comme celui-ci, vous ne pouvez pas prévoir d'avance si la personne va exécuter l'opération une fois, dix fois ou dix mille fois.
continuer = "o"
while continuer == "o":
print("On continue...")
continuer = input("Voulez-vous continuer ? o/n ")
Ici, tant que la variable continuer
est égale à la lettre "o", on exécute la boucle et on demande, à l'intérieur de la boucle, si l'utilisateur veut continuer, avec la fonction input
. Si l'utilisateur nous retourne la lettre "o" pour oui, alors on continue, et sinon, avec n'importe quelle autre valeur, la variable continuer
ne sera donc plus égale à la lettre "o", et on va sortir de la boucle.
Donc la différence ici, avec la boucle infinie qu'on avait précédemment, c'est que la fonction input
va momentanément interrompre l'exécution de la boucle puisqu'on attend un input de l'utilisateur. Ça limite donc les risques, puisque tant que l'utilisateur ne rentre aucune information, notre script Python ne va rien faire et va juste attendre.
Un autre cas de figure dans lequel on pourrait vouloir une boucle infinie, c'est dans le cas où on veut répéter une opération, par exemple, toutes les dix minutes.
import time
while True:
print("Sauvegarde en cours...")
time.sleep(600)
La condition qu'on indique ici à la fonction while
est tout simplement le booléen True. Donc la boucle est infinie à coup sûr. Vous n'avez aucun autre moyen de sortir de cette boucle que d'arrêter directement le processus Python dans le gestionnaire des tâches.
Là encore, à la différence de la boucle infinie qu'on avait précédemment et qui exécutait des milliers d'opérations à la seconde, ici, on utilise un module, le module time
, qui nous permet, avec la fonction sleep
, de dire à notre script qu'il doit attendre un certain nombre de secondes entre chaque opération.
Ici, on fait donc une sauvegarde de la base de données toutes les 600 secondes, c'est-à-dire toutes les dix minutes.
C'est donc un exemple concret de script qui pourrait rouler en arrière-plan sur une machine pour réaliser, par exemple comme ici, une sauvegarde de la base de données. On veut que cette sauvegarde s'effectue toutes les dix minutes, et ce, tant et aussi longtemps que l'ordinateur sur lequel roule le script est allumé.
En résumé
On a vu qu'une boucle while
est exécutée tant qu'une condition est vraie, ce qui implique donc qu'il faut bien faire attention avec ce type de boucle, à ce que la condition ne soit pas tout le temps vraie, pour éviter de rentrer dans une boucle infinie, à moins que ce soit intentionnel, comme dans les deux derniers exemples que l'on a vus.
Ce n'est pas fini...
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.