Contactez-nous

Lire les données entrées par l'utilisateur (input())

Apprenez à lire les données entrées par l'utilisateur au clavier en Python en utilisant la fonction intégrée 'input()'. Découvrez comment afficher un message, récupérer une chaîne de caractères, et convertir l'entrée en d'autres types.

La fonction input() : demander une entrée à l'utilisateur

La fonction intégrée `input()` permet à un programme Python d'interagir avec l'utilisateur en lui demandant d'entrer des données au clavier.

Lorsque `input()` est appelée, le programme s'arrête et attend que l'utilisateur tape quelque chose et appuie sur la touche Entrée.

Une fois que l'utilisateur a appuyé sur Entrée, `input()` retourne ce que l'utilisateur a tapé, sous forme de *chaîne de caractères*.

Syntaxe :

chaine_entree = input(message_invite)
  • `message_invite` : (Optionnel) Une chaîne de caractères qui sera affichée à l'utilisateur pour lui indiquer ce qu'il doit entrer. Ce message est souvent appelé un "prompt".
  • `input(message_invite)` retourne une chaîne de caractères contenant ce que l'utilisateur a tapé (sans le saut de ligne final).

Exemple :

nom = input("Entrez votre nom : ")
print("Bonjour,", nom, "!")

Dans cet exemple, le programme affiche "Entrez votre nom : ", attend que l'utilisateur tape son nom et appuie sur Entrée, puis affiche "Bonjour," suivi du nom entré par l'utilisateur.

Si vous appelez `input()` sans argument, aucun message ne sera affiché, mais le programme attendra quand même une entrée de l'utilisateur.

input() retourne toujours une chaîne de caractères

Il est *très important* de comprendre que `input()` retourne *toujours* une chaîne de caractères (`str`), même si l'utilisateur entre un nombre.

Si vous voulez obtenir un nombre (entier, flottant) ou un autre type de donnée, vous devez *convertir* la chaîne de caractères retournée par `input()` en utilisant les fonctions de conversion appropriées (par exemple, `int()`, `float()`, `bool()`, etc.).

Exemple (erreur si on ne convertit pas) :

age = input("Entrez votre âge : ")
# print(age + 1)  # TypeError: can only concatenate str (not "int") to str

Dans cet exemple, `age` est une chaîne de caractères, pas un nombre. Essayer d'ajouter 1 à une chaîne provoque une `TypeError`.

Exemple (avec conversion en entier) :

age_str = input("Entrez votre âge : ")
age = int(age_str)  # Conversion en entier
print(age + 1)

Ou, plus concisément :

age = int(input("Entrez votre âge : "))
print(age + 1)

Il est essentiel de convertir l'entrée utilisateur au type approprié *avant* de l'utiliser dans des calculs ou d'autres opérations.

Gérer les erreurs de conversion : try...except

Lorsque vous convertissez l'entrée utilisateur en un autre type (par exemple, avec `int()` ou `float()`), il est possible qu'une erreur se produise si l'utilisateur entre une valeur invalide.

Par exemple, si vous essayez de convertir la chaîne "abc" en entier, une `ValueError` sera levée.

Pour éviter que votre programme ne plante, vous devez utiliser un bloc `try...except` pour gérer ces erreurs potentielles.

Exemple :

try:
    age = int(input("Entrez votre âge : "))
    print("Age :", age)
except ValueError:
    print("Erreur : Vous devez entrer un nombre entier.")

Dans cet exemple, si l'utilisateur entre une chaîne qui ne peut pas être convertie en entier, une `ValueError` sera levée, et le bloc `except` affichera un message d'erreur.

C'est une bonne pratique de toujours valider et gérer les erreurs potentielles lors de la lecture de données entrées par l'utilisateur, car vous ne pouvez jamais être sûr de ce que l'utilisateur va taper.

Exemples d'utilisation de input()

Voici quelques exemples d'utilisation de `input()` :

  • Demander un nom :
nom = input("Entrez votre nom : ")
  • Demander un âge (avec conversion en entier et gestion d'erreur) :
while True:
    try:
        age = int(input("Entrez votre âge : "))
        if age >= 0:
            break  # Sort de la boucle si l'âge est valide
        else:
            print("L'âge doit être positif ou nul.")
    except ValueError:
        print("Erreur : Vous devez entrer un nombre entier.")
  • Demander une réponse oui/non (avec conversion en booléen) :
reponse = input("Voulez-vous continuer (oui/non) ? ").lower()
continuer = reponse == "oui"
  • Demander un choix dans une liste :
options = ["a", "b", "c"]
choix = input(f"Choisissez une option ({', '.join(options)}) : ").lower()
if choix in options:
    print("Vous avez choisi :", choix)
else:
    print("Choix invalide.")

Limitations et alternatives à input()

`input()` est une fonction simple et pratique pour interagir avec l'utilisateur dans un programme en ligne de commande, mais elle a quelques limitations:

  • Elle ne permet de lire qu'une seule ligne à la fois.
  • Elle ne permet pas de masquer l'entrée (par exemple, pour un mot de passe).
  • Elle n'est pas adaptée pour des interfaces graphiques.

Pour des besoins plus avancés, il existe d'autres options:

  • Pour lire des mots de passe de manière sécurisée, vous pouvez utiliser le module `getpass`.
  • Pour des interfaces en ligne de commande plus sophistiquées, vous pouvez utiliser des bibliothèques comme `prompt_toolkit`.
  • Pour des interfaces graphiques, vous utiliserez des bibliothèques comme `Tkinter`, `PyQt`, `Kivy`, etc., qui offrent des widgets pour l'entrée de texte.