Travailler avec des nombres stockés sous forme de chaînes est un casse-tête assez courant en Python. Que vous analysiez des entrées utilisateur, lisiez des fichiers de données ou récupériez des informations depuis des API, vous devez souvent convertir ces représentations de chaînes en nombres réels pour effectuer des calculs. Bien sûr, int()
la fonction Python est la solution idéale, mais ce n’est pas toujours aussi simple qu’il y paraît. Parfois, les chaînes peuvent être dans des bases différentes (binaire ou hexadécimale, par exemple), être invalides, voire contenir des décimales. Comprendre comment gérer tout cela efficacement et en toute sécurité est la clé pour éviter les plantages et les bugs, source de frustrations. Ce guide présente les différentes manières de convertir des chaînes en entiers en Python, couvrant tous les aspects, des conversions simples aux cas complexes où la saisie n’est pas parfaitement nette. Vous y trouverez quelques conseils pour gérer différents systèmes numériques, gérer les entrées invalides sans générer d’exceptions et convertir des chaînes de type float. L’objectif est de sortir ces nombres de leur forme chaîne et de les préparer pour les calculs, sans perdre la tête.
Comment convertir des chaînes en entiers en Python
Méthode 1 : Convertir une chaîne décimale en entier
Voici les bases : votre chaîne est un nombre décimal normal, comme « 42 ».Il suffit de la transmettre à int()
et le tour est joué. Certaines chaînes peuvent parfois présenter des problèmes, notamment si elles contiennent des espaces ou d’autres caractères. Assurez-vous donc que votre entrée est propre ou supprimez-la au préalable.
s = "42" n = int(s) print(n * 2) # Output: 84
Dans certaines configurations, notamment avec saisie utilisateur, il peut être utile d’ajouter une gestion des erreurs (try/except), mais pour des données propres, c’est suffisant. N’oubliez pas que si la chaîne n’est pas un nombre correct, vous obtiendrez un ValueError
.
Méthode 2 : Convertir des chaînes dans d’autres bases (binaire, hexadécimal, octal)
Si le nombre est donné dans une autre base, comme binaire (« 1010 ») ou hexadécimale (« 1A »), il faut indiquer int()
quelle base utiliser. Cela surprend beaucoup de gens, car la valeur par int("1010")
défaut est décimale (ce qui donne 1010, et non 10 !).
# Binary b = "1010" n = int(b, 2) # Output: 10 # Hexadecimal h = "1A" m = int(h, 16) # Output: 26
Python prend en charge les bases de 2 à 36, offrant ainsi une grande flexibilité. Attention : si vous ne spécifiez pas la bonne base, l’analyse sera décimale, ce qui peut entraîner des bugs déroutants si vous n’y prêtez pas attention.
Méthode 3 : gérer les entrées non valides en toute sécurité
Franchement : saisies utilisateur ou données désordonnées ? Elles ne sont pas toujours parfaites. Envelopper l’ int()
appel dans un bloc try/except est donc une solution miracle. Cela empêche votre programme de planter sur des entrées non autorisées comme « abc » ou « 12.3 ».
s = "abc" try: n = int(s) print(n) except ValueError: print("Invalid input: cannot convert to integer")
Si vous n’attendez que des entiers positifs (par exemple, d’un fichier), vous pouvez vérifier avec str.isdigit()
. Attention : isdigit()
ne reconnaît pas les nombres négatifs ni les décimales.
s = "12345" if s.isdigit(): print(int(s)) else: print("Not a pure digit string")
Je ne sais pas pourquoi, mais sur certaines entrées, en particulier celles avec des signes ou des décimales, isdigit()
cela ne suffit tout simplement pas. La route try/except est donc plus sûre.
Méthode 4 : Convertir des chaînes de type flottant en entiers
Avez-vous déjà vu « 88, 8 » ou « 12, 5 » sous forme de chaînes ? Essayer de les convertir directement int()
est impossible : Python génère des erreurs. La solution consiste à convertir d’abord cette chaîne en nombre à virgule flottante, puis en entier. Cela simplifie les choses, mais attention : cette opération tronque vers zéro, ce qui entraîne la perte de la partie fractionnaire.
s = "88.8" n = int(float(s)) # Result: 88 (fraction truncated)
Si vous préférez arrondir au nombre entier le plus proche, remplacez- int()
le par round()
.
s = "88.8" n = round(float(s)) # Result: 89
Méthode 5 : Convertir une liste de chaînes en entiers
Lorsque vous manipulez des listes de chaînes de nombres, inutile d’effectuer la boucle manuellement à chaque fois. Utilisez map() ou les compréhensions de liste : elles sont pratiques et rapides.
xs = ["1", "2", "3"] # Using map: nums = list(map(int, xs)) # [1, 2, 3] # Using list comprehension: nums = [int(x) for x in xs]
Vous avez trouvé des éléments non valides ? Enveloppez la logique dans une fonction personnalisée qui try/except
gère les erreurs correctement. Mieux vaut prévenir que guérir, surtout si votre source de données n’est pas parfaitement propre.
Pièges courants à éviter
- ❌ Essayer
int()
des chaînes non numériques comme « bonjour » déclencheValueError
. Mieux vaut prévenir que guérir. - ❌ Évitez de transmettre directement des nombres flottants comme « 12, 5 » : convertissez-les d’abord en nombre flottant, puis en int, sinon vous obtiendrez des erreurs.
- ❌ Oublier la base : « 1010 » correspond au nombre décimal 1010, sauf si vous spécifiez base=2. Sinon, ce n’est pas binaire.
Réflexions finales
Convertir des chaînes en entiers en Python n’est pas une mince affaire, mais savoir gérer les différents formats et les erreurs potentielles fait toute la différence entre un script peu fiable et un script fiable. Que vous analysiez des entrées utilisateur, traitiez des données binaires ou nettoyiez des ensembles de données complexes, ces techniques vous offrent une boîte à outils pour assurer le bon fonctionnement de votre système.
Maîtrisez-les et votre code ne sera pas si fragile, juste un peu plus ennuyeux parfois, mais c’est la programmation, n’est-ce pas ?