Aller au contenu

Les boucles Tant que (avec while)⚓

Ce type de boucle est adaptĂ© quand nous ne savons pas Ă  l'avance combien de fois les instructions doivent ĂȘtre rĂ©pĂ©tĂ©es.

Exemple 1
Demandons Ă  un utilisateur d'entrer des prĂ©noms et arrĂȘtons-nous quand le prĂ©nom est "BĂ©bert". Lisez puis testez ceci dans l'Ă©diteur Python (bug : utilisez plutĂŽt Thonny) :

🐍 Script Python
prenom = "Hubert"           # ou n'importe quel texte autre que "BĂ©bert"
while prenom != "BĂ©bert":   # tant que le prenom n'est pas "BĂ©bert"
    prenom = input()        # demander à l'utilisateur un autre prénom
    print("Bonjour", prenom)
print("Ah non, pas BĂ©bert !")
###

La boucle se lit ici : tant que la variable prenom ne contient pas la valeur "Bébert", demander (input) une nouvelle valeur, l'affecter à prenom et afficher "Bonjour" suivi de la valeur entrée.

La boucle Tant que (while) exécute des instructions tant qu'une condition est vérifiée.

A propos de la condition

Une condition de while s'Ă©crit comme une condition de if.

La condition doit comporter un élément variable (une variable ou résultat d'une fonction faisant appel au hasard ou...). En effet, observez que :

🐍 Script Python
    while 1 < 2:
        ...

comme 1 < 2 est toujours vrai, cette boucle ne s'arrĂȘtera jamais (boucle infinie).

🐍 Script Python
    while 1 == 2:
        ...

comme 1 == 2 est toujours faux, cette boucle ne s'exécutera pas et donc ne sert à rien.

🐍 Script Python
    while a > 2:
        ...

ici la boucle sera exécutée tant que a > 2.

Il faut bien sûr :

  • que la variable utilisĂ©e dans la condition (ici a) ait Ă©tĂ© dĂ©finie avant la boucle...
  • que la condition finisse par ĂȘtre fausse pour sortir de la boucle (ici, il faut que a change de valeur et finisse par ĂȘtre infĂ©rieure ou Ă©gale Ă  2).

Exercice 1

Que se passe-t-il :

  • si vous supprimez la premiĂšre ligne ?
  • si vous mettez prenom = "BĂ©bert" Ă  la place de prenom = "Hubert" ?
while est plus fort que for

Il est toujours possible de remplacer une boucle for par une boucle while.

Par exemple :

🐍 Script Python
for n in range(100):
    print("Je ne me laisserai pas aller à la facilité")

peut s'Ă©crire :

🐍 Script Python
nb_copie = 0
while nb_copie < 100:
    print("Je ne me laisserai pas aller à la facilité")
    nb_copie = nb_copie + 1

L'inverse n'est pas vrai, il suffit de réfléchir à l'exemple 1 ci-dessus, non réalisable avec un for (nous ne savons pas combien de prénoms l'utilisateur va entrer avant d'entrer "Bébert"...). On dit que la boucle for est une boucle bornée et que la boucle while est une boucle non bornée.

Il est fréquent d'utiliser une variable qui va permettre à la boucle de s'interrompre mais d'autres variables peuvent apparaßtre comme accumulateurs, comme dans l'exemple suivant :

Exemple 2

Faisons une division entiÚre avec des soustractions ; par exemple combien y a-t-il de 7 dans 61 ? L'idée est ici de retirer des 7 du nombre 61 tant que c'est possible (tant que le résultat dépasse 7).

🐍 Script Python
nb_sept = 0
nombre = 61
reste = nombre
while reste >= 7:              # je peux encore retirer un 7
    nb_sept = nb_sept + 1       # ou nb_sept += 1
    reste = reste - 7         # je retire un 7 du reste
print("Il y a", nb_sept, "sept dans", nombre, "et il reste", reste)

Prenez le temps de regarder comment ce programme fonctionne :

À retenir

La syntaxe générale est :

🐍 Script Python
début du programme
while condition:
    bloc d’instructions Ă  exĂ©cuter tant que la condition est vĂ©rifiĂ©e
suite du programme

graph LR
A[début]-->B{while}
B-->|condition vérifiée| C[instructions dans le while]
B-->|condition non vérifiée| D[suite du programme]
C-->|retour au début du while|B
Remarquez les points communs avec def, if et for :

  • le : Ă  la fin de la ligne du while ;
  • le bloc d’instructions Ă  repĂ©ter est indentĂ©.

Enfin, remarquez qu'il y a trois points essentiels pour créer une boucle while :

  • Initialisation(s) : avant la boucle la (ou les) variable(s) utilisĂ©e(s) dans la condition doivent ĂȘtre initialisĂ©e(s).
  • Condition : bien la dĂ©finir. En particulier, il est prĂ©fĂ©rable qu'elle devienne fausse Ă  un certain moment !
  • Modification(s) : la (ou les) variable(s) utilisĂ©e(s) dans la condition doivent ĂȘtre modifiĂ©e(s) (sans quoi, la boucle sera infinie).
Les commandes break et continue

La commande break permet de sortir définitivement d'une boucle. En général, il est conseillé de se passer de cette commande mais elle peut servir dans de rares occasions.

Exemple d'utilisation (non pertinente):

🐍 Script Python
n = 0
while True:     # boucle infinie
    if n == 10:
        break   # sortir de la boucle quand n vaut 10
    n = n + 1   # instruction non exécutée si n vaut 10
print("n vaut", n)

La commande continue permet de sortir de l'itération actuelle et de passer à l'itération suivante. Testez l'exemple suivant :

🐍 Script Python
n = 0
while n < 10:
    n = n + 1
    if n == 5:
        continue   # passer à l'itération suivante si n vaut 5
    print("n vaut", n)  # instruction non exécutée si n vaut 5

Petite remarque au passage : vous avez vu que la derniÚre ligne dit que n vaut 10, c'est pourquoi il n'y a plus d'autre itération.

Exercices

Exercices 2 et 3 : lecture et compréhension d'un script.

Exercice 4 : température de l'eau.

Exercice 5 : population, variante de l'exercice 3.

Exercice 6 : jeu : trouver un nombre secret.

Exercice 7

Si vous avez fini les cinq exercices ci-dessus : multiplication "russe".