HOWTO · Python

Comment lire les entrées de l'utilisateur comme des entiers en Python

Lisez les entrées de l'utilisateur comme des entiers en Python 3 : convertissez une valeur unique avec int(input()), lisez plusieurs entiers sur une seule ligne avec split() et map(), et gérez les entrées invalides avec try-except.

Sur cette page

En Python 3, la fonction input() renvoie toujours une chaîne de caractères. Pour travailler avec la valeur saisie comme un nombre, convertissez cette chaîne avec int(). Cet article montre comment lire un seul entier, comment gérer une entrée qui n’est pas un entier valide et comment lire plusieurs entiers sur une seule ligne.

Cet article couvre Python 3. Python 2 utilisait raw_input() pour la même tâche et a atteint sa fin de vie en 2020, donc les exemples ci-dessous utilisent input() partout.

Lire un seul entier avec int(input())

Lisez d’abord l’entrée sous forme de chaîne, puis convertissez-la :

user_input = input("Please enter an integer: ")
integer_value = int(user_input)

print("You entered:", integer_value)
print(type(integer_value))

Sortie :

Please enter an integer: 42
You entered: 42
<class 'int'>

La conversion et la lecture sont souvent combinées en une seule ligne, qui se comporte exactement de la même manière :

integer_value = int(input("Please enter an integer: "))

Si l’utilisateur saisit quelque chose qui n’est pas un entier, comme hello ou 3.5, int() lève une ValueError et le programme s’arrête. La section suivante montre comment gérer ce cas.

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

Placez la conversion dans un bloc try-except pour intercepter la ValueError et redemander la saisie au lieu de planter :

while True:
    user_input = input("Please enter an integer: ")
    try:
        integer_value = int(user_input)
        print("You entered:", integer_value)
        break
    except ValueError:
        print("That's not a valid integer. Please try again.")

La boucle continue de demander jusqu’à ce que la conversion réussisse. Ce n’est qu’alors que break met fin à la boucle.

Sortie :

Please enter an integer: hello
That's not a valid integer. Please try again.
Please enter an integer: 10
You entered: 10

Valider les entrées de cette manière est une bonne pratique pour les programmes interactifs : une faute de frappe devrait coûter à l’utilisateur une invite supplémentaire, pas toute l’exécution.

Lire plusieurs entiers sur une seule ligne

Lorsqu’un programme a besoin de plusieurs nombres à la fois, laissez l’utilisateur les saisir sur une seule ligne, séparés par des espaces. split() découpe la ligne en morceaux de chaîne, et map() convertit chaque morceau avec int() :

numbers = list(map(int, input("Enter numbers separated by spaces: ").split()))

print(numbers)
print("Sum:", sum(numbers))

Sortie :

Enter numbers separated by spaces: 4 8 15 16 23 42
[4, 8, 15, 16, 23, 42]
Sum: 108

Une compréhension de liste fait le même travail et est tout aussi courante :

numbers = [int(piece) for piece in input("Enter numbers separated by spaces: ").split()]

Si vous avez besoin d’un nombre fixe de valeurs, déballez directement le résultat. Ici, l’utilisateur doit saisir exactement deux entiers :

a, b = map(int, input("Enter two numbers: ").split())

print("a =", a)
print("b =", b)

Sortie :

Enter two numbers: 3 17
a = 3
b = 17

Saisir plus ou moins de valeurs que prévu lève une ValueError, donc combinez ce motif avec la boucle try-except de la section précédente lorsque le nombre compte.

Ce que int() accepte et ce qu’il rejette

int() est plus tolérant que beaucoup ne l’imaginent. Il ignore les espaces au début et à la fin, accepte un signe + ou - facultatif et autorise les tirets bas entre les chiffres :

print(int(" 42 "))
print(int("+7"))
print(int("1_000"))

Sortie :

42
7
1000

Il rejette tout ce qui n’est pas un littéral de nombre entier sous forme de chaîne, y compris "3.5", "12a" et la chaîne vide "" — tous lèvent une ValueError. Si votre entrée peut contenir des valeurs décimales, convertissez plutôt avec float(), ou utilisez int(float(text)) lorsque la suppression de la partie fractionnaire est acceptable.

Conclusion

Lire des entiers en Python 3 se résume à un motif : input() vous donne une chaîne, et int() la transforme en entier. Utilisez une boucle try-except pour que les saisies invalides soient redemandées au lieu de faire planter le programme, et utilisez split() avec map() ou une compréhension de liste lorsque vous avez besoin de plusieurs entiers sur une seule ligne.

FAQ

  1. Comment lire l’entrée de l’utilisateur comme un entier en Python 3 ?
    Utilisez int(input()) : input() lit une ligne sous forme de chaîne, et int() la convertit en entier.

  2. Comment lire plusieurs entiers sur une seule ligne ?
    Découpez la ligne et convertissez chaque morceau, par exemple list(map(int, input().split())) ou [int(x) for x in input().split()].

  3. Que se passe-t-il si l’utilisateur saisit une valeur qui n’est pas un entier ?
    int() lève une ValueError. Interceptez-la avec un bloc try-except et redemandez la saisie.

  4. Pourquoi ne puis-je pas faire d’opérations arithmétiques directement sur le résultat de input() ?
    Parce que input() renvoie une chaîne, pas un nombre. Ajouter une chaîne et un entier lève une TypeError jusqu’à ce que vous convertissiez la chaîne avec int().

  5. Quelle est la différence entre Python 2 et Python 3 pour la lecture des entrées ?
    Python 2 lisait les entrées textuelles avec raw_input(), tandis que Python 3 utilise input(). La conversion avec int() fonctionne de la même manière dans les deux cas, mais Python 2 n’est plus maintenu, donc le nouveau code devrait utiliser Python 3.