Comment construire des boucles While en Python 3

introduction

Les programmes informatiques sont parfaits pour automatiser et répéter des tâches de manière à ne pas être obligés de le faire. Une façon de répéter des tâches similaires consiste à utiliserloops. Nous allons couvrir leswhile loop de Python dans ce didacticiel.

Une bouclewhile implémente l'exécution répétée de code en fonction d'une conditionBoolean donnée. Le code qui se trouve dans un blocwhile s'exécutera tant que l'instructionwhile aura la valeur True.

Vous pouvez considérer la bouclewhile comme unconditional statement répétitif. Après une instructionif, le programme continue d'exécuter du code, mais dans une bouclewhile, le programme revient au début de l'instruction while jusqu'à ce que la condition soit False.

Contrairement auxfor loops qui s'exécutent un certain nombre de fois, les boucleswhile sont conditionnelles, vous n'avez donc pas besoin de savoir combien de fois répéter le code entrant.

Alors que la boucle

En Python, les boucleswhile sont construites comme ceci:

while [a condition is True]:
    [do something]

L'exécution de quelque chose continuera jusqu'à ce que la condition évaluée ne soit plus vraie.

Créons un petit programme qui exécute une bouclewhile. Dans ce programme, nous demanderons à l’utilisateur de saisir un mot de passe. En passant par cette boucle, il y a deux résultats possibles:

  • Si le mot de passeisest correct, la bouclewhile se fermera.

  • Si le mot de passe estnot correct, la bouclewhile continuera à s'exécuter.

Nous allons créer un fichier appelépassword.py dans l'éditeur de texte de votre choix, et commencer par initialiser la variablepassword comme unstring vide:

password.py

password = ''

La chaîne vide sera utilisée pour recevoir l'entrée de l'utilisateur dans la bouclewhile.

Maintenant, nous allons construire l'instructionwhile avec sa condition:

password.py

password = ''

while password != 'password':

Ici, lewhile est suivi de la variablepassword. Nous cherchons à voir si la variablepassword est définie sur la chaînepassword (en fonction de l'entrée utilisateur plus tard), mais vous pouvez choisir la chaîne de votre choix.

Cela signifie que si l'utilisateur entre la chaînepassword, la boucle s'arrêtera et le programme continuera à exécuter tout code en dehors de la boucle. Cependant, si la chaîne saisie par l'utilisateur n'est pas égale à la chaînepassword, la boucle continuera.

Ensuite, nous allons ajouter le bloc de code qui fait quelque chose dans la bouclewhile:

password.py

password = ''

while password != 'password':
    print('What is the password?')
    password = input()

À l'intérieur de la bouclewhile, le programme exécute une instruction d'impression qui demande le mot de passe. Ensuite, la variablepassword est définie sur l'entrée de l'utilisateur avec la fonctioninput().

Le programme vérifiera si la variablepassword est affectée à la chaînepassword, et si c'est le cas, la bouclewhile se terminera. Donnons au programme une autre ligne de code pour que cela se produise:

password.py

password = ''

while password != 'password':
    print('What is the password?')
    password = input()

print('Yes, the password is ' + password + '. You may enter.')

La dernière instructionprint() est en dehors de la bouclewhile, donc lorsque l'utilisateur saisitpassword comme mot de passe, il verra l'instruction d'impression finale en dehors de la boucle.

Cependant, si l'utilisateur n'entre jamais le motpassword, il n'atteindra jamais la dernière instructionprint() et sera bloqué dans une boucle infinie.

Uninfinite loop se produit lorsqu'un programme continue de s'exécuter dans une boucle, sans jamais la quitter. Pour sortir des boucles infinies sur la ligne de commande, appuyez surCTRL + C.

Enregistrez le programme et lancez-le:

python password.py

Un mot de passe vous sera demandé, puis vous pourrez le tester avec diverses entrées possibles. Voici un exemple de sortie du programme:

OutputWhat is the password?
hello
What is the password?
sammy
What is the password?
PASSWORD
What is the password?
password
Yes, the password is password. You may enter.

Gardez à l'esprit que les chaînes sont sensibles à la casse, sauf si vous utilisez également unstring function pour convertir la chaîne en minuscules (par exemple) avant de vérifier.

Exemple de programme avec boucle While

Maintenant que nous comprenons le principe général d'une bouclewhile, créons un jeu de devinettes en ligne de commande qui utilise efficacement une bouclewhile. Pour mieux comprendre le fonctionnement de ce programme, vous devriez également lire à propos deusing conditional statements etconverting data types.

Tout d'abord, nous allons créer un fichier appeléguess.py dans l'éditeur de texte de votre choix. Nous voulons que l'ordinateur propose des nombres aléatoires que l'utilisateur puisse deviner, nous allons doncimport le modulerandom avec une instructionimport. Si vous ne connaissez pas ce package, vous pouvez en savoir plus surgenerating random numbers from the Python docs.

guess.py

import random

Ensuite, nous allons attribuer un entier aléatoire à la variablenumber, et le garder dans la plage de 1 à 25 (inclus), dans l'espoir que cela ne rendra pas le jeu trop difficile.

guess.py

import random

number = random.randint(1, 25)

À ce stade, nous pouvons entrer dans notre bouclewhile, en initialisant d'abord une variable, puis en créant la boucle.

guess.py

import random

number = random.randint(1, 25)

number_of_guesses = 0

while number_of_guesses < 5:
    print('Guess a number between 1 and 25:')

    guess = input()
    guess = int(guess)

    number_of_guesses = number_of_guesses + 1

    if guess == number:
        break

Nous avons initialisé la variablenumber_of_guesses à 0, afin de l’augmenter à chaque itération de notre boucle pour ne pas avoir de boucle infinie. Ensuite, nous avons ajouté l'instructionwhile afin que lenumber_of_guesses soit limité à 5 au total. Après la cinquième estimation, l’utilisateur reviendra à la ligne de commande et pour l’instant, si l’utilisateur saisit autre chose qu’un entier, il recevra une erreur.

Dans la boucle, nous avons ajouté une instructionprint() pour inviter l'utilisateur à entrer un nombre, que nous avons pris avec la fonctioninput() et défini sur la variableguess. Ensuite, nous avons convertiguess d'une chaîne en entier.

Avant la fin de la boucle, nous voulons également augmenter la variablenumber_of_guesses de 1 afin de pouvoir parcourir la boucle 5 fois.

Enfin, nous écrivons une instruction conditionnelleif pour voir si leguess que l'utilisateur a créé est équivalent aunumber que l'ordinateur a généré, et si c'est le cas, nous utilisons unbreak statement sortir de la boucle.

Le programme fonctionne pleinement et nous pouvons l'exécuter avec la commande suivante:

python guess.py

Bien que cela fonctionne, pour le moment, l'utilisateur ne sait jamais si sa proposition est correcte et il peut deviner le nombre total de fois 5 sans jamais savoir s'il l'a bien compris. Voici un exemple de sortie du programme en cours:

OutputGuess a number between 1 and 25:
11
Guess a number between 1 and 25:
19
Guess a number between 1 and 25:
22
Guess a number between 1 and 25:
3
Guess a number between 1 and 25:
8

Ajoutons des instructions conditionnelles en dehors de la boucle afin que l’utilisateur puisse savoir s’il a correctement deviné ou non le nombre. Celles-ci iront à la fin de notre fichier actuel.

guess.py

import random

number = random.randint(1, 25)

number_of_guesses = 0

while number_of_guesses < 5:
    print('Guess a number between 1 and 25:')
    guess = input()
    guess = int(guess)

    number_of_guesses = number_of_guesses + 1

    if guess == number:
        break

if guess == number:
    print('You guessed the number in ' + str(number_of_guesses) + ' tries!')

else:
    print('You did not guess the number. The number was ' + str(number))

À ce stade, le programme indique à l'utilisateur s'il a obtenu le bon numéro ou non, ce qui risque de ne pas se produire avant la fin de la boucle lorsque l'utilisateur n'a pas deviné.

Pour aider l’utilisateur en cours de route, ajoutons quelques instructions conditionnelles supplémentaires dans la bouclewhile. Ceux-ci peuvent indiquer à l'utilisateur si leur nombre est trop bas ou trop élevé, de sorte qu'ils peuvent être plus susceptibles de deviner le nombre correct. Nous les ajouterons avant notre ligneif guess == number

guess.py

import random

number = random.randint(1, 25)

number_of_guesses = 0

while number_of_guesses < 5:
    print('Guess a number between 1 and 25:')
    guess = input()
    guess = int(guess)

    number_of_guesses = number_of_guesses + 1

    if guess < number:
        print('Your guess is too low')

    if guess > number:
        print('Your guess is too high')

    if guess == number:
        break

if guess == number:
    print('You guessed the number in ' + str(number_of_guesses) + ' tries!')

else:
    print('You did not guess the number. The number was ' + str(number))

Lorsque nous exécutons à nouveau le programme avecpython guess.py, nous voyons que l'utilisateur obtient une assistance plus guidée dans ses devinettes. Ainsi, si le nombre généré aléatoirement est12 et que l'utilisateur devine18, on leur dira que leur estimation est trop élevée, et ils peuvent ajuster leur prochaine estimation en conséquence.

Il y a plus à faire pour améliorer le code, y compris la gestion des erreurs lorsque l'utilisateur n'entre pas un entier, mais dans cet exemple, nous voyons une bouclewhile au travail dans un court programme de ligne de commande.

Conclusion

Ce tutoriel a expliqué comment les boucleswhile fonctionnent en Python et comment les construire. While loops continue de parcourir un bloc de code à condition que la condition définie dans l'instructionwhile soit True.

À partir de là, vous pouvez continuer à en apprendre davantage sur la boucle en lisant des didacticiels surfor loops etbreak, continue, and pass statements.