La plupart des programmes sont écrits pour résoudre le problème d’un utilisateur final. Pour ce faire, vous avez généralement besoin d’obtenir des informations de la part de l’utilisateur. Par exemple, supposons que quelqu’un veuille savoir s’il est assez âgé pour voter. Si vous écrivez un programme pour répondre à cette question, vous devez connaître l’âge de l’utilisateur avant de pouvoir fournir une réponse. Le programme devra demander à l’utilisateur d’entrer, ou de saisir (input), son âge. Une fois que le programme a cette entrée, il peut la comparer à l’âge légal pour voter afin de déterminer si l’utilisateur est assez âgé, puis rapporter le résultat.
Dans ce chapitre, vous apprendrez à accepter les entrées de l’utilisateur pour que votre programme puisse travailler avec. Lorsque votre programme aura besoin d’un nom, vous pourrez inviter l’utilisateur à en entrer un. Lorsque votre programme aura besoin d’une liste de noms, vous pourrez inviter l’utilisateur à entrer une série de noms. Pour ce faire, vous utiliserez la fonction input().
Vous apprendrez également comment garder les programmes en cours d’exécution aussi longtemps que les utilisateurs le souhaitent, afin qu’ils puissent entrer autant d’informations que nécessaire. Ensuite, votre programme pourra travailler avec ces informations. Vous utiliserez la boucle while de Python pour garder les programmes en exécution tant que certaines conditions restent vraies.
Avec la capacité de travailler avec les entrées utilisateur et de contrôler la durée d’exécution de vos programmes, vous serez capable d’écrire des programmes entièrement interactifs.
Comment fonctionne la fonction input()¶
La fonction input() met votre programme en pause et attend que l’utilisateur entre du texte. Une fois que Python reçoit l’entrée de l’utilisateur, il assigne cette entrée à une variable pour qu’il soit pratique pour vous de travailler avec.
Par exemple, le programme suivant demande à l’utilisateur d’entrer du texte, puis affiche ce message à l’utilisateur:
message = input("Dites-moi quelque chose, et je vous le répéterai : ")
print(message)Dites-moi quelque chose, et je vous le répéterai : Bonjour tout le monde !
Bonjour tout le monde !
La fonction input() prend un argument : l’invite (prompt), ou les instructions, que nous voulons afficher à l’utilisateur pour qu’il sache quoi faire. Dans cet exemple, lorsque Python exécute la première ligne, l’utilisateur voit l’invite “Dites-moi quelque chose, et je vous le répéterai :”. Le programme attend pendant que l’utilisateur entre sa réponse et continue après que l’utilisateur appuie sur ENTRÉE. La réponse est assignée à la variable message, puis print(message) affiche l’entrée à l’utilisateur:
Dites-moi quelque chose, et je vous le répéterai : Bonjour tout le monde !
Bonjour tout le monde !Écrire des invites claires¶
Chaque fois que vous utilisez la fonction input(), vous devez inclure une invite claire et facile à suivre qui indique à l’utilisateur exactement quel type d’information vous recherchez. Toute phrase indiquant à l’utilisateur quoi entrer devrait fonctionner. Par exemple:
name = input("Veuillez entrer votre nom : ")
print(f"\nBonjour, {name} !")Veuillez entrer votre nom : Mike
Bonjour, Mike !
Ajoutez un espace à la fin de vos invites (après les deux points dans l’exemple précédent) pour séparer l’invite de la réponse de l’utilisateur et pour qu’il soit clair pour votre utilisateur où entrer son texte.
Par exemple:
Veuillez entrer votre nom : Mike
Bonjour, Mike !
Parfois, vous voudrez écrire une invite qui fait plus d’une ligne. Par exemple, vous pourriez vouloir dire à l’utilisateur pourquoi vous demandez cette entrée. Vous pouvez assigner votre invite à une variable et passer cette variable à la fonction input(). Cela vous permet de construire votre invite sur plusieurs lignes, puis d’écrire une instruction input() propre.
prompt = "Si vous nous dites qui vous êtes, nous pouvons personnaliser les messages que vous voyez."
prompt += "\nQuel est votre prénom ? "
name = input(prompt)
print(f"\nBonjour, {name} !")Si vous nous dites qui vous êtes, nous pouvons personnaliser les messages que vous voyez.
Quel est votre prénom ? Mike
Bonjour, Mike !
Cet exemple montre une façon de construire une chaîne de caractères sur plusieurs lignes. La première ligne assigne la première partie du message à la variable prompt. Dans la seconde ligne, l’opérateur += prend la chaîne qui a été assignée à prompt et ajoute la nouvelle chaîne à la fin. L’invite s’étend maintenant sur deux lignes, encore une fois avec un espace après le point d’interrogation pour la clarté:
Si vous nous dites qui vous êtes, nous pouvons personnaliser les messages que vous voyez.
Quel est votre prénom ? Mike
Bonjour, Mike !
Utiliser int() pour accepter des entrées numériques¶
Lorsque vous utilisez la fonction input(), Python interprète tout ce que l’utilisateur entre comme une chaîne de caractères (string). Considérez la session d’interpréteur suivante, qui demande l’âge de l’utilisateur:
age = input("Quel âge avez-vous ? ")Quel âge avez-vous ? 18
L’utilisateur entre le nombre 18, mais quand nous demandons à Python la valeur de age, il retourne ‘21’, la représentation en chaîne de caractères de la valeur numérique entrée. Nous savons que Python a interprété l’entrée comme une chaîne car le nombre est maintenant entouré de guillemets. Si tout ce que vous voulez faire est d’imprimer l’entrée, cela fonctionne bien. Mais si vous essayez d’utiliser l’entrée comme un nombre, vous obtiendrez une erreur:
age = input("Quel âge avez-vous ? ")Quel âge avez-vous ? 18
age >= 17---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/tmp/ipython-input-937564180.py in <cell line: 0>()
----> 1 age >= 17
TypeError: '>=' not supported between instances of 'str' and 'int'Nous pouvons résoudre ce problème en utilisant la fonction int(), qui dit à Python de traiter l’entrée comme une valeur numérique. La fonction int() convertit une représentation en chaîne d’un nombre en une représentation numérique, comme montré ici:
age = input("Quel âge avez-vous ? ")Quel âge avez-vous ? 18
age = int(age)
age >= 17TrueComment utilisez-vous la fonction int() dans un programme réel ? Considérez un programme qui détermine si les gens sont assez grands pour monter dans des montagnes russes:
height = input("Quelle est votre taille, en pouces ? ")
height = int(height)
if height >= 48:
print("\nVous êtes assez grand pour monter !")
else:
print("\nVous pourrez monter quand vous serez un peu plus vieux.")Quelle est votre taille, en pouces ? 45
Vous pourrez monter quand vous serez un peu plus vieux.
Lorsque vous utilisez des entrées numériques pour faire des calculs et des comparaisons, assurez-vous de convertir la valeur d’entrée en une représentation numérique d’abord.
L’opérateur Modulo¶
Un outil utile pour travailler avec des informations numériques est l’opérateur modulo (%), qui divise un nombre par un autre nombre et retourne le reste:
4 % 315 % 326 % 307 % 31L’opérateur modulo ne vous dit pas combien de fois un nombre tient dans un autre ; il vous dit juste quel est le reste. Lorsqu’un nombre est divisible par un autre nombre, le reste est 0, donc l’opérateur modulo retourne toujours 0. Vous pouvez utiliser ce fait pour déterminer si un nombre est pair ou impair:
number = input("Entrez un nombre, et je vous dirai s'il est pair ou impair : ")
number = int(number)
if number % 2 == 0:
print(f"\nLe nombre {number} est pair.")
else:
print(f"\nLe nombre {number} est impair.")Entrez un nombre, et je vous dirai s'il est pair ou impair : 86
Le nombre 86 est pair.
Introduction aux boucles while¶
La boucle for prend une collection d’éléments et exécute un bloc de code une fois pour chaque élément de la collection. En revanche, la boucle while s’exécute aussi longtemps que, ou tant que (while), une certaine condition est vraie.
La boucle while en action¶
Vous pouvez utiliser une boucle while pour compter à travers une série de nombres. Par exemple, la boucle while suivante compte de 1 à 5:
current_number = 1
while current_number <= 5:
print(current_number)
current_number += 11
2
3
4
5
Dans la première ligne, nous commençons à compter à partir de 1 en assignant à current_number la valeur 1. La boucle while est ensuite configurée pour continuer à s’exécuter tant que la valeur de current_number est inférieure ou égale à 5. Le code à l’intérieur de la boucle imprime la valeur de current_number et ajoute ensuite 1 à cette valeur avec current_number += 1 (L’opérateur += est un raccourci pour current_number = current_number + 1).
Python répète la boucle tant que la condition current_number <= 5 est vraie. Une fois que la valeur de current_number est supérieure à 5, la boucle s’arrête et le programme se termine.
Les programmes que vous utilisez tous les jours contiennent très probablement des boucles while. Par exemple, un jeu a besoin d’une boucle while pour continuer à s’exécuter tant que vous voulez continuer à jouer, et pour s’arrêter dès que vous demandez à quitter.
Laisser l’utilisateur choisir quand quitter¶
Nous pouvons faire tourner le programme parrot.py aussi longtemps que l’utilisateur le souhaite en plaçant la majeure partie du programme à l’intérieur d’une boucle while. Nous définirons une valeur de sortie (quit value) et garderons le programme en cours d’exécution tant que l’utilisateur n’a pas entré la valeur de sortie:
prompt = "\nDites-moi quelque chose, et je vous le répéterai :"
prompt += "\nEntrez 'quit' pour terminer le programme. "
message = ""
while message != 'quit':
message = input(prompt)
if message != 'quit':
print(message)
Dites-moi quelque chose, et je vous le répéterai :
Entrez 'quit' pour terminer le programme. quit
Nous définissons message comme une chaîne vide, "", pour que Python ait quelque chose à vérifier la première fois qu’il atteint la ligne while. La première fois que le programme s’exécute et que Python atteint l’instruction while, il doit comparer la valeur de message à 'quit', mais aucune entrée utilisateur n’a encore été faite. Pour résoudre ce problème, nous nous assurons de donner à message une valeur initiale. Bien que ce soit juste une chaîne vide, cela aura du sens pour Python et lui permettra d’effectuer la comparaison qui fait fonctionner la boucle while.
Cette boucle while s’exécute tant que la valeur de message n’est pas 'quit'. Lorsque l’utilisateur entre finalement 'quit', Python arrête d’exécuter la boucle while et le programme se termine.
Utiliser un drapeau (Flag)¶
Pour un programme qui ne doit s’exécuter que tant que de nombreuses conditions sont vraies, vous pouvez définir une variable qui détermine si le programme entier est actif ou non. Cette variable, appelée un drapeau (flag), agit comme un signal pour le programme. Nous pouvons écrire nos programmes pour qu’ils s’exécutent tant que le drapeau est réglé sur True et s’arrêtent lorsque l’un des nombreux événements règle la valeur du drapeau sur False.
Ajoutons un drapeau à parrot.py. Ce drapeau, que nous appellerons active (bien que vous puissiez l’appeler n’importe comment), surveillera si le programme doit continuer à s’exécuter ou non:
prompt = "\nDites-moi quelque chose, et je vous le répéterai :"
prompt += "\nEntrez 'quit' pour terminer le programme. "
active = True
while active:
message = input(prompt)
if message == 'quit':
active = False
else:
print(message)
Dites-moi quelque chose, et je vous le répéterai :
Entrez 'quit' pour terminer le programme. quit
Nous réglons la variable active sur True pour que le programme démarre dans un état actif. Tant que la variable active reste True, la boucle continuera de s’exécuter. Dans l’instruction if à l’intérieur de la boucle, nous vérifions la valeur de message une fois que l’utilisateur entre sa saisie. Si l’utilisateur entre 'quit', nous réglons active sur False, et la boucle while s’arrête.
Utiliser break pour quitter une boucle¶
Pour quitter une boucle while immédiatement sans exécuter le reste du code dans la boucle, quels que soient les résultats de tout test conditionnel, utilisez l’instruction break. L’instruction break dirige le flux de votre programme.
Par exemple, considérez un programme qui demande à l’utilisateur les lieux qu’il a visités. Nous pouvons arrêter la boucle while dans ce programme en appelant break dès que l’utilisateur entre la valeur 'quit':
prompt = "\nVeuillez entrer le nom d'une ville que vous avez visitée :"
prompt += "\n(Entrez 'quit' quand vous avez fini.) "
while True:
city = input(prompt)
if city == 'quit':
break
else:
print(f"J'aimerais aller à {city.title()} !")J'aimerais aller à Quit !
J'aimerais aller à Quit !
Veuillez entrer le nom d'une ville que vous avez visitée :
(Entrez 'quit' quand vous avez fini.) quit
Une boucle qui commence par while True s’exécutera indéfiniment à moins qu’elle n’atteigne une instruction break.
Utiliser continue dans une boucle¶
Plutôt que de sortir entièrement d’une boucle sans exécuter le reste de son code, vous pouvez utiliser l’instruction continue pour retourner au début de la boucle en fonction du résultat d’un test conditionnel. Par exemple, considérez une boucle qui compte de 1 à 10 mais imprime seulement les nombres impairs dans cette plage:
current_number = 0
while current_number < 10:
current_number += 1
if current_number % 2 == 0:
continue
print(current_number)1
3
5
7
9
D’abord, nous réglons current_number à 0. Comme c’est inférieur à 10, Python entre dans la boucle. Une fois dans la boucle, nous incrémentons le compte de 1, donc current_number est 1. L’instruction if vérifie ensuite le modulo de current_number et 2. Si le modulo est 0 (ce qui signifie que current_number est divisible par 2), l’instruction continue dit à Python d’ignorer le reste de la boucle et de retourner au début. Si le nombre actuel n’est pas divisible par 2, le reste de la boucle est exécuté et Python imprime le nombre actuel.
Éviter les boucles infinies¶
Chaque boucle while a besoin d’un moyen de s’arrêter pour ne pas continuer à s’exécuter indéfiniment. Si vous omettez accidentellement la ligne qui incrémente la variable (comme x += 1), la boucle s’exécutera indéfiniment.
Si votre programme reste bloqué dans une boucle infinie, appuyez sur CTRL-C ou fermez simplement la fenêtre du terminal affichant la sortie de votre programme.
Utiliser une boucle while avec des listes et des dictionnaires¶
Pour garder une trace de nombreux utilisateurs et informations, nous aurons besoin d’utiliser des listes et des dictionnaires avec nos boucles while. Une boucle for est efficace pour parcourir une liste, mais vous ne devriez pas modifier une liste à l’intérieur d’une boucle for car Python aura du mal à suivre les éléments dans la liste. Pour modifier une liste au fur et à mesure que vous la traitez, utilisez une boucle while.
Déplacer des éléments d’une liste à une autre¶
Considérez une liste d’utilisateurs nouvellement enregistrés mais non vérifiés sur un site web. Après avoir vérifié ces utilisateurs, comment pouvons-nous les déplacer vers une liste séparée d’utilisateurs confirmés ? Une façon serait d’utiliser une boucle while pour tirer les utilisateurs de la liste des utilisateurs non confirmés au fur et à mesure que nous les vérifions, puis de les ajouter à une liste séparée d’utilisateurs confirmés.
# Commencer avec les utilisateurs qui doivent être vérifiés,
# et une liste vide pour contenir les utilisateurs confirmés.
unconfirmed_users = ['alice', 'brian', 'candace']
confirmed_users = []
# Vérifier chaque utilisateur tant qu'il y a des utilisateurs non confirmés.
# Déplacer chaque utilisateur vérifié dans la liste des utilisateurs confirmés.
while unconfirmed_users:
current_user = unconfirmed_users.pop()
print(f"Vérification de l'utilisateur : {current_user.title()}")
confirmed_users.append(current_user)
# Afficher tous les utilisateurs confirmés.
print("\nLes utilisateurs suivants ont été confirmés :")
for confirmed_user in confirmed_users:
print(confirmed_user.title())Vérification de l'utilisateur : Candace
Vérification de l'utilisateur : Brian
Vérification de l'utilisateur : Alice
Les utilisateurs suivants ont été confirmés :
Candace
Brian
Alice
La boucle while s’exécute tant que la liste unconfirmed_users n’est pas vide. Dans cette boucle, la fonction pop() retire les utilisateurs non vérifiés un par un depuis la fin de unconfirmed_users.
Supprimer toutes les instances de valeurs spécifiques d’une liste¶
Disons que vous avez une liste d’animaux de compagnie avec la valeur 'cat' répétée plusieurs fois. Pour supprimer toutes les instances de cette valeur, vous pouvez exécuter une boucle while jusqu’à ce que 'cat' ne soit plus dans la liste, comme montré ici:
pets = ['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
print(pets)
while 'cat' in pets:
pets.remove('cat')
print(pets)['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
['dog', 'dog', 'goldfish', 'rabbit']
Remplir un dictionnaire avec des entrées utilisateur¶
Vous pouvez demander autant d’entrées que nécessaire à chaque passage dans une boucle while. Faisons un programme de sondage dans lequel chaque passage dans la boucle demande le nom et la réponse du participant. Nous stockerons les données recueillies dans un dictionnaire.
responses = {}
# Définir un drapeau pour indiquer que le sondage est actif.
polling_active = True
while polling_active:
# Demander le nom et la réponse de la personne.
name = input("\nQuel est votre nom ? ")
response = input("Quelle montagne aimeriez-vous gravir un jour ? ")
# Stocker la réponse dans le dictionnaire.
responses[name] = response
# Savoir si quelqu'un d'autre va répondre au sondage.
repeat = input("Voulez-vous laisser une autre personne répondre ? (yes/ no) ")
if repeat == 'no':
polling_active = False
# Le sondage est terminé. Afficher les résultats.
print("\n--- Résultats du Sondage ---")
for name, response in responses.items():
print(f"{name} aimerait gravir {response}.")
Quel est votre nom ? Jimmy
Quelle montagne aimeriez-vous gravir un jour ? Mnt CMR
Voulez-vous laisser une autre personne répondre ? (yes/ no) no
--- Résultats du Sondage ---
Jimmy aimerait gravir Mnt CMR.