W3docs

Saisie utilisateur en Python

Apprenez à lire les entrées utilisateur en Python avec input(), convertir les types, valider les données et gérer les erreurs.

La fonction intégrée input() de Python permet à vos programmes de faire une pause et d'attendre qu'un utilisateur saisisse quelque chose. Ce chapitre couvre tout ce dont vous avez besoin pour lire, valider et convertir les entrées utilisateur — d'une simple invite en une ligne à des boucles de saisie robustes qui rejettent les données incorrectes.

Ce que vous allez apprendre :

  • Comment fonctionne input() et ce qu'elle retourne toujours
  • Convertir une entrée string en nombres et autres types
  • Demander plusieurs valeurs sur une seule ligne
  • Valider les entrées avec des boucles et try/except
  • Lire des mots de passe sans afficher les caractères
  • Les pièges courants et comment les éviter

La fonction input()

input() affiche une invite optionnelle, attend que l'utilisateur appuie sur Entrée, et retourne tout ce que l'utilisateur a tapé sous forme de string.

name = input("What is your name? ")
print("Hello, " + name + "!")

Exemple de session :

What is your name? Alice
Hello, Alice!

Deux choses à remarquer :

  1. La chaîne d'invite est affichée dans le terminal sans saut de ligne — le curseur se positionne juste après le ?.
  2. La valeur de retour est toujours un str, même si l'utilisateur tape 42.

Si vous appelez input() sans argument, aucune invite n'est affichée mais la fonction attend quand même une entrée :

value = input()  # silent prompt

Convertir les entrées en d'autres types

Comme input() retourne toujours une string, vous devez convertir la valeur lorsque vous avez besoin d'un nombre ou d'un autre type. Les fonctions de conversion intégrées de Python rendent cela simple.

Entrée entière

age = int(input("Enter your age: "))
print("In ten years you will be", age + 10)
Enter your age: 25
In ten years you will be 35

Entrée flottante

price = float(input("Enter the price: "))
tax = price * 0.08
print(f"Tax: ${tax:.2f}")
Enter the price: 19.99
Tax: $1.60

Entrée de type boolean

Python ne dispose d'aucun raccourci bool() pour le texte « oui/non », il faut donc vérifier la string directement :

answer = input("Continue? (yes/no): ").strip().lower()
if answer == "yes":
    print("Continuing...")
else:
    print("Stopping.")

Pour une référence complète sur le système de types de Python, consultez les chapitres Types de données Python et Conversion de types Python.


Lire plusieurs valeurs à la fois

Les utilisateurs ont parfois besoin de saisir plusieurs valeurs sur une seule ligne. str.split() divise la string d'entrée en une liste (array).

# Read three space-separated integers
a, b, c = input("Enter three numbers separated by spaces: ").split()
a, b, c = int(a), int(b), int(c)
print("Sum:", a + b + c)
Enter three numbers separated by spaces: 4 7 2
Sum: 13

Vous pouvez également utiliser un séparateur personnalisé :

first, last = input("Enter your full name (first,last): ").split(",")
print(f"Hello, {first.strip()} {last.strip()}!")
Enter your full name (first,last): Alice,Smith
Hello, Alice Smith!

map() est un moyen concis de convertir toutes les parties en une seule fois :

numbers = list(map(int, input("Enter numbers: ").split()))
print("Numbers:", numbers)
print("Total:", sum(numbers))
Enter numbers: 3 1 4 1 5 9
Numbers: [3, 1, 4, 1, 5, 9]
Total: 23

Gérer les entrées invalides avec try/except

Si l'utilisateur saisit quelque chose d'inattendu — des lettres là où vous attendiez un nombre — la conversion lève une ValueError et fait planter le programme, sauf si vous la capturez.

Gestion des erreurs de base

try:
    age = int(input("Enter your age: "))
    print("Valid age:", age)
except ValueError:
    print("That is not a valid number. Please enter digits only.")
Enter your age: twenty
That is not a valid number. Please enter digits only.

Consultez le chapitre Python Try Except pour un guide complet sur la gestion des exceptions.

Répéter l'invite jusqu'à obtenir une entrée valide

Une boucle while True combinée avec break est le schéma standard pour « continuer à demander jusqu'à ce que l'utilisateur saisisse une valeur correcte » :

while True:
    try:
        age = int(input("Enter your age: "))
        if age < 0 or age > 130:
            print("Please enter a realistic age (0-130).")
        else:
            break  # valid input received
    except ValueError:
        print("That is not a valid number. Please try again.")

print(f"Your age is {age}.")

Exemple de session :

Enter your age: abc
That is not a valid number. Please try again.
Enter your age: -5
Please enter a realistic age (0-130).
Enter your age: 28
Your age is 28.

Ce schéma — boucle, try/except, vérification de plage, break — couvre la grande majorité des besoins réels de validation des entrées.

Consultez Les boucles while Python pour en savoir plus sur le contrôle des boucles.


Supprimer les espaces

Les utilisateurs ajoutent souvent accidentellement un espace en début ou en fin de saisie. Appelez toujours .strip() sur une entrée textuelle avant de la comparer ou de la stocker :

username = input("Username: ").strip()
if username == "admin":
    print("Welcome, administrator!")
else:
    print(f"Welcome, {username}!")

.lower() ou .upper() aide pour les comparaisons insensibles à la casse :

city = input("Enter your city: ").strip().lower()
if city == "new york":
    print("You are in the Big Apple!")

Validation des entrées avec des conditions

Pour les choix ou les motifs, vérifiez la valeur directement après avoir supprimé les espaces et normalisé :

color = input("Choose a color (red/green/blue): ").strip().lower()
valid_colors = {"red", "green", "blue"}

if color not in valid_colors:
    print(f"'{color}' is not a valid choice. Pick red, green, or blue.")
else:
    print(f"You chose {color}.")

Valider avec des expressions régulières

Le module re vous permet de vérifier qu'une entrée correspond à un motif spécifique :

import re

email_pattern = r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"

email = input("Enter your email address: ").strip()
if re.match(email_pattern, email):
    print("Valid email address.")
else:
    print("Invalid email address. Please include '@' and a domain.")
Enter your email address: [email protected]
Valid email address.

Remarque : L'expression régulière ci-dessus est simplifiée à des fins de démonstration. Les systèmes en production utilisent généralement une bibliothèque dédiée (telle que email-validator) ou une validation côté serveur pour les adresses e-mail.


Lire les mots de passe de manière sécurisée

La fonction input() standard affiche les caractères dans le terminal au fur et à mesure que l'utilisateur tape. Pour les mots de passe et autres informations secrètes, utilisez getpass.getpass() de la bibliothèque standard — elle masque les caractères saisis :

import getpass

password = getpass.getpass("Enter your password: ")
print("Password received (length:", len(password), "characters).")

getpass.getpass() accepte la même chaîne d'invite optionnelle que input(). Le terminal supprime les caractères ; la valeur retournée est une string simple.


Mise en forme de la sortie à partir des entrées

Une fois que vous disposez des données de l'utilisateur, les f-strings de Python facilitent leur présentation claire. Consultez le chapitre Chaînes formatées pour plus de détails.

name = input("Name: ").strip().title()
birth_year = int(input("Birth year: "))
current_year = 2025
age = current_year - birth_year

print(f"\n--- Profile ---")
print(f"Name      : {name}")
print(f"Born      : {birth_year}")
print(f"Age       : {age}")
Name: alice smith
Birth year: 1995

--- Profile ---
Name      : Alice Smith
Born      : 1995
Age       : 30

Python 2 vs Python 3

Si vous rencontrez du code Python 2 plus ancien, notez que la fonction équivalente s'appelait raw_input(). En Python 2, input() évaluait l'expression saisie par l'utilisateur (similaire à eval()), ce qui représentait un risque de sécurité. En Python 3, input() retourne toujours une string simple et raw_input() n'existe plus.

# Python 2 (legacy — do not use)
# name = raw_input("Your name: ")

# Python 3 (correct)
name = input("Your name: ")

Pièges courants

ErreurCe qui se passeSolution
age = int(input(...)) sans try/exceptPlantage sur une entrée non numériqueEntourer avec try/except ValueError
Oublier .strip()" admin" n'est pas égal à "admin"Toujours supprimer les espaces des entrées textuelles
Comparer l'entrée brute à un entierinput() == 5 est toujours FalseConvertir d'abord : int(input(...)) == 5
Utiliser input() pour les mots de passeCaractères visibles à l'écranUtiliser getpass.getpass()
S'attendre à ce que bool(input(...)) fonctionneToute string non vide est truthyAnalyser la string : == "yes"

Référence rapide

# String input
name = input("Name: ").strip()

# Integer input with validation
while True:
    try:
        n = int(input("Enter a number: "))
        break
    except ValueError:
        print("Integers only, please.")

# Float input
price = float(input("Price: "))

# Multiple values on one line
x, y = map(int, input("Enter x y: ").split())

# Password (hidden input)
import getpass
pwd = getpass.getpass("Password: ")

# Choice validation
choice = input("(yes/no): ").strip().lower()
if choice not in ("yes", "no"):
    print("Please type yes or no.")

Sujets connexes

Exercices

Pratique
Which of the following are valid ways to get user input in Python?
Which of the following are valid ways to get user input in Python?
Was this page helpful?