Boucle WHILE Python : répéter une instruction tant qu’une condition est vraie
La boucle WHILE est l’un des outils les plus pratiques de Python. Découvre à quoi elle sert et comment tu peux l’utiliser pour gagner un temps précieux !
En Python, la boucle WHILE permet de répéter une instruction plusieurs fois, tant qu’une condition est vraie. Elle permet donc de gagner du temps dans la rédaction de ton code, puisque tu n’écris qu’une seule fois l’instruction qui sera répétée. Mais en plus, elle rend ton programme plus autonome : Python reconnaît lui-même à quel moment il doit sortir de la boucle WHILE !
Dans cet article on vous dit tout sur la boucle WHILE.
Mais si vous êtes intéréssé pour creuser un peu plus vos notions pythons, vous pouvez regarder notre formation sur Python et nos formations Data Analyst.
Qu’est ce qu’une boucle WHILE ?
Rôle d’une boucle “tant que”
Le rôle d’une boucle WHILE est d’exécuter un bloc de code, c’est-à-dire un certain nombre d'instructions, tant qu’une condition est vraie.
Une boucle WHILE en Python commence donc toujours par un test logique. Python vérifie si une condition est vérifiée. Si elle n’est pas vérifiée, il n’a même pas besoin de rentrer dans la boucle ! En revanche, si la condition est vraie, Python exécute le bloc de code qui est juste en dessous.
Une fois la première itération effectuée, Python vérifie à nouveau si la condition est vraie ou non. Tant que la condition est vraie, Python exécute une nouvelle fois le bloc de code : c’est reparti pour un tour !
La boucle WHILE s’arrête lorsque Python s’aperçoit que le test logique n’est plus vérifié. Alors, il n’exécute pas le bloc de code en dessous, et sort de la boucle WHILE. La suite du programme prend le relais.
{{cours-gratuit-python="/brouillon"}}
Syntaxe d’une boucle WHILE
Une boucle WHILE se rédige comme suit :
<h6>WHILE condition :<br>
  instructions </h6>
Lorsque tu écris une boucle WHILE, il faut faire attention à deux choses :
- la première ligne se termine toujours par deux points “:”
- le bloc de code qui contient les instructions doit être indiqué par une indentation, c'est-à-dire un léger décalage vers la droite. C’est comme ça que Python fait la différence entre ce qui est inclus dans la boucle WHILE, et le reste du programme.
Remarque : On obtient une indentation avec 4 espaces ou en appuyant sur la touche “tab” de ton ordinateur.
Prenons un exemple : la boucle ci-dessous augmente la valeur de x tant que celle-ci est inférieure ou égale à 5.
<h6> x = 1 <br><br>
WHILE x <= 5 : <br>
  print(x) <br>
  x=x+1 <br><br>
1 <br>
2 <br>
3 <br>
4 <br>
5 </h6>
Au début de la boucle, x vaut 1.
Remarque : il faut que la variable x soit définie avant le début de la boucle WHILE ! Si Python essaie de faire un test logique sur une variable qui n’est pas définie, il "bug''.
Si la condition “x est inférieur ou égal à 5” est vérifiée : Python exécute les instructions qui suivent. Il commence donc par afficher la valeur de x (avec “print(x)”).
Ensuite, Python ajoute 1 à la valeur de la variable x (avec “x=x+1”). Ainsi, lorsque la deuxième boucle commence, x vaut 2. Puisque 2 est toujours inférieur à 5, les instructions de la boucle s’exécutent de nouveau.
Ainsi de suite, jusqu’à ce que x vaille 6 : à ce moment-là, la condition initiale n’est plus vérifiée ! Cela indique à Python qu’il faut sortir de la boucle.
Remarque : l’instruction “print(x)” a été exécutée lorsque x vaut 5 car l’opérateur <= signifie “inférieur OU égal à”. Ce n’est qu'à partir du moment où x vaut 6 que la condition n’est pas respectée.
La boucle WHILE est un outil très puissant et très utile pour un Data Analyst en entreprise. Les formations de Databird te permettent de découvrir les outils et les bonnes pratiques propres à l'analyse de données. Notre ambition est de te former par la pratique afin que tu deviennes opérationnel en entreprise au terme d’une formation à temps plein, à temps partiel, ou à ton rythme.
Cas d’usage d’une boucle WHILE
Voici un exemple d’application business qui illustre l’intérêt d’une boucle WHILE.
Une entreprise spécialisée dans la vente en ligne propose une réduction aux visiteurs de son site. La mécanique est simple : un code promotionnel est affiché sur la page d’accueil du site. Il offre 20% de réduction lors d’un achat.
Pour simplifier, on considère que tous les produits sont vendus pour 10 €. Pour chaque produit acheté, l'entreprise sait qu' elle offre 2€ de réduction à un client qui a utilisé le code promo.
L’entreprise ne souhaite pas investir plus de 1000 € avec cette opération marketing.
Pour savoir combien de ventes il est possible de réaliser avec le code promo sans dépasser le budget, on peut utiliser une boucle WHILE.
Dans un premier temps, il faut créer les variables Python suivantes :
- La variable vente = le nombre de ventes réalisées avec le code promo.
- La variable budget_marketing = le budget marketing investi dans l’opération.
Ensuite, il suffit de rédiger la boucle WHILE suivante :
<h6> nb_de_ventes = 0<br>
budget_marketing = 0<br><br>
WHILE budget_marketing < 1000 : <br>
  nb_de_ventes = nb_de_ventes + 1 <br>
  budget_marketing = budget_marketing + 2 <br>
print(nb_de_ventes) <br><br>
501 </h6>
Au début de la boucle, le nombre de ventes et le budget marketing investi valent 0.
Lors de la première itération, la variable nb_de_ventes augmente de 1 (avec l’instruction “nb_de_ventes = nb_de_ventes + 1”). Le budget marketing investi augmente, quant à lui, de 2 (avec l’instruction “budget_marketing = budget_marketing + 2”).
En effet, chaque vente effectuée avec le code promo coûte 2 € à l’entreprise. La variable budget_marketing augmente donc de 2 quand la variable nb_de_vente augmente de 1.
Python retourne alors au début de la boucle WHILE, et vérifie que le budget marketing n’a pas encore dépassé les 1000 €, c’est-à-dire que la variable budget_marketing vérifie bien la condition logique : “budget_marketing est strictement inférieur à 1000”.
Tant que c’est le cas, Python exécute à nouveau les instructions contenues dans la boucle.
Dès que budget_marketing est supérieur ou égal à 1000, Python sort de la boucle WHILE ! La variable nb_de_ventes vaut alors exactement le nombre de ventes maximal qu’il est possible d’effectuer sans dépasser le budget de 1000 €.
Dans ce cas, une fois sorti de la boucle, Python affiche “500” (en exécutant l’instruction “print(nb_de_ventes)”). Ainsi, l’entreprise sait que si le code promo est utilisé plus de 500 fois pour acheter un produit de 10 €, le budget de l’opération marketing dépassera 1000 €.
En réalité, tous les produits ne coûtent pas 10 € et un code promo peut être utilisé une fois pour acheter plusieurs produits. Correct ?
Exact !
L'exemple ci-dessus est assez simple. Pour faire face au différents cas de figure qu'on peut rencontrer en entreprise, il est possible de connecter la boucle WHILE aux ventes réalisées avec un code promotionnel (directement dans le back-office du site). A chaque fois qu’une vente est réalisée avec un code promo, on ajoute 20% du prix d’achat à la variable budget_marketing.
Remarque : cette boucle est un peu plus compliquée à écrire mais rien d’insurmontable pour un data analyst formé par nos professeurs !
Ainsi, la variable budget_marketing augmente en fonction des ventes réalisées sur le site.
Pour être sûr de ne pas dépasser le budget associé à l’opération marketing, il est même possible de désactiver automatiquement le code promo en ajoutant une condition IF à la suite du programme.
<h6> IF budget_marketing >= 1000 : <br>
  supprimer l’affichage du code promotionnel du site #Instruction 1<br>
  désactiver le code promotionnel dans le module d’achat #Instruction 2<br>
  print(“Budget atteint. Opération marketing terminée !”) </h6>
Remarque : en fonction de la technologie utilisée par le site, les lignes des codes correspondant aux instructions 1 et 2 peuvent faire appel aux compétences d'un développeur web.
Dans ce cas, la boucle WHILE et la condition IF permettent donc à l’entreprise de maîtriser facilement le budget de son opération marketing : le code promotionnel est désactivé dès que le budget de 1000 € est épuisé !
Chez Databird, nous apprenons à nos élèves à utiliser Python pour répondre à des enjeux business. Nous proposons des sessions d’étude de cas tous les après-midi, et la formation se termine par un projet final soumis à un jury de professionnels !
{{formation-python="/brouillon"}}
Attention à la boucle infinie !
La boucle infinie est un danger redouté par les développeurs Python. Elle apparaît lorsqu'on exécute une boucle dont la condition est toujours vraie.
Autrefois, elle conduisait au “Blue screen of death” (“l’écran bleu de la mort”). L’ordinateur devait s’éteindre, car il n’arrivait pas à venir à bout du programme.
Il existe deux manières de rédiger (sans le vouloir !) une boucle WHILE infinie.
La boucle WHILE avec une condition éternellement vraie
Voici un exemple :
<h6> while 1 == 1 : <br>
  print('Okay') <br><br>
Okay <br>
Okay <br>
Okay <br>
… </h6>
Remarque : en Python, le symbole “==” est utilisé pour tester si deux valeurs sont identiques.
Ici, quoiqu’il arrive, la condition sera toujours remplie : 1 vaut toujours 1. Cette boucle est donc vouée à tourner éternellement, c’est-à-dire à afficher ‘Okay’ un nombre infini de fois. L’ordinateur ne peut que planter.
La boucle WHILE avec une condition figée
Essaie de trouver ce qui cloche dans cette boucle WHILE :
<h6>x=0 <br>
while x <= 5 : <br>
  print(x) </h6>
C’est la même boucle qu’au début de l’article, mais il lui manque une petite ligne qui fait toute la différence : “x = x+1”.
En effet, dans cette boucle WHILE, on ne modifie pas la valeur de la variable x. Cette valeur reste donc figée sur 0. Le test logique “x<=5” est donc toujours vrai, et la boucle va tourner un nombre infini de fois.
Si tu exécutes cette boucle, tu risques d'avoir quelques problèmes avec ton ordinateur...
Il faut donc être attentif lorsqu’on rédige une boucle WHILE :
- En s'assurant que le test logique initial n’est pas éternellement vrai,
- En s'assurant que la variable qui est utilisée dans le test est modifiée à chaque itération.
Quitter une boucle WHILE avec l’instruction break
L’instruction break permet de sortir d’une boucle WHILE avant la fin naturelle de celle-ci. On peut ainsi quitter la boucle WHILE même si le test logique qui lui est associé est encore vrai.
Voici un exemple :
<h6>x=0 <br>
WHILE x<10 : <br>
  x=x+1 <br>
  print(x) <br>
  IF x == 3 : <br>
    break <br>
print("Fin de la boucle") <br><br>
1 <br>
2 <br>
3 <br>
Fin de la boucle </h6>
Ici, la boucle a tourné pour x=0, x=1, et x=2. Mais lorsque x vaut 3, la boucle WHILE s’arrête immédiatement car la condition IF est vraie. Ainsi, seules les valeurs 1, 2 et 3 sont affichées.
On a effectué deux tests logiques :
- Le premier, au début de la boucle, vérifie que x est bien strictement inférieur à 10.
- Le second, à la fin de la boucle, vérifie si x est égal à 3. Si le second test de logique est vrai, l’instruction break est exécutée et la boucle WHILE s’arrête.
L’instruction break correspond à un arrêt immédiat de la boucle. Toutes les opérations qui ont été effectuées avant “break” sont conservées, mais Python arrête la boucle WHILE et passe à la suite du programme.
A lire également : comment faire une boucle FOR avec Python ?
{{formation-python="/brouillon"}}