Comprendre les différences entre isdecimal(), isdigit() et isnumeric() en Python

1. À propos de isdecimal(), isdigit() et isnumeric() en Python

Python propose les méthodes isdecimal(), isdigit() et isnumeric() pour tester le contenu numérique d'une chaîne de caractères. Elles semblent très proches, mais elles n'acceptent pas exactement les mêmes caractères Unicode.

Ces trois méthodes retournent un booléen. Avec les chiffres décimaux ordinaires de 0 à 9, elles retournent toutes True.

Sortie :

La différence apparaît avec certains caractères Unicode. Par exemple, le caractère exposant "²" est accepté par isdigit() et isnumeric(), mais pas par isdecimal().

Sortie :

Avec une fraction Unicode comme "⅕", seule isnumeric() retourne True.

Sortie :

On peut donc retenir une relation générale importante : isdecimal() est la plus restrictive, isdigit() accepte davantage de caractères et isnumeric() est la plus large des trois.

2. Comprendre la méthode isdecimal()

La méthode isdecimal() retourne True lorsque la chaîne n'est pas vide et que tous ses caractères sont des caractères décimaux Unicode. Les chiffres classiques de 0 à 9 appartiennent à cette catégorie.

Dans l'exemple suivant, tous les caractères sont des chiffres décimaux.

Sortie :

isdecimal() reconnaît également d'autres caractères décimaux Unicode, notamment les chiffres arabes orientaux utilisés dans l'exemple suivant.

Sortie :

En revanche, un chiffre écrit en exposant n'appartient pas à la catégorie des caractères décimaux acceptés par isdecimal().

Sortie :

La présence d'un signe, d'un espace ou d'un séparateur décimal entraîne également le retour de False.

Sortie :

3. Comprendre la méthode isdigit()

La méthode isdigit() est un peu moins restrictive que isdecimal(). Elle accepte les caractères décimaux reconnus par isdecimal(), mais aussi certains autres caractères Unicode considérés comme des chiffres.

Avec les chiffres ordinaires, isdigit() retourne naturellement True.

Sortie :

La différence avec isdecimal() apparaît notamment avec certains chiffres en exposant. Le caractère "²" retourne True avec isdigit().

Sortie :

Une fraction Unicode comme "⅕" n'est cependant pas considérée comme un chiffre par isdigit().

Sortie :

Comme isdecimal(), isdigit() retourne False pour les représentations textuelles de nombres contenant un signe ou un point décimal.

Sortie :

4. Comprendre la méthode isnumeric()

La méthode isnumeric() est la plus large des trois méthodes. Elle retourne True pour les caractères décimaux, les caractères reconnus comme chiffres par isdigit(), ainsi que pour certains autres caractères Unicode possédant une valeur numérique.

Les chiffres ordinaires sont bien entendu reconnus par isnumeric().

Sortie :

Le caractère exposant "²" possède également une propriété numérique reconnue par isnumeric().

Sortie :

Contrairement à isdigit(), isnumeric() reconnaît aussi certaines fractions Unicode, comme "⅕".

Sortie :

Certains caractères numériques provenant d'autres systèmes d'écriture sont également reconnus. Le caractère chinois "四", qui représente le nombre quatre, est par exemple numérique pour isnumeric().

Sortie :

5. Comparer isdecimal(), isdigit() et isnumeric()

La différence entre les trois méthodes peut être comprise comme un élargissement progressif des caractères acceptés : isdecimal() est la plus restrictive, isdigit() est plus large et isnumeric() est la plus générale.

Le programme suivant compare les trois méthodes avec plusieurs caractères représentatifs.

Sortie :

Relation entre les trois méthodes

Pour une chaîne non vide, lorsqu'un caractère est accepté par isdecimal(), il est également accepté par isdigit() et isnumeric(). De même, les caractères acceptés par isdigit() sont également numériques au sens de isnumeric(). On peut donc retenir l'inclusion suivante : isdecimal() → isdigit() → isnumeric().

L'exemple suivant illustre cette progression avec trois caractères appartenant à des catégories différentes.

Sortie :

Les nombres négatifs et décimaux

Ces méthodes examinent les caractères de la chaîne et non la validité globale d'un nombre écrit sous forme de texte. Un signe "-" ou un point "." n'est pas un caractère numérique accepté par ces méthodes.

Sortie :

Le cas de la chaîne vide

Pour retourner True, chacune de ces méthodes exige au moins un caractère valide. Une chaîne vide retourne donc False dans les trois cas.

Sortie :

Attention à la conversion avec int()

Un résultat True avec isdigit() ou isnumeric() ne signifie pas nécessairement que la chaîne peut être directement convertie avec int(). Par exemple, "²" satisfait isdigit() mais int() ne l'accepte pas directement.

Sortie :

Quel test choisir ?

Le choix dépend du type de caractères que le programme doit accepter. isdecimal() convient lorsqu'on souhaite restreindre le test aux caractères décimaux Unicode. isdigit() accepte en plus certains caractères représentant des chiffres, tandis que isnumeric() convient lorsque l'on souhaite reconnaître un ensemble plus large de caractères Unicode possédant une valeur numérique.

Le programme suivant permet de constater qu'un même caractère peut être accepté par une méthode et refusé par une autre.

Sortie :

6. À retenir !

Les méthodes isdecimal(), isdigit() et isnumeric() permettent toutes de tester des caractères numériques, mais elles ne couvrent pas exactement le même ensemble de caractères Unicode.

  • isdecimal() est la plus restrictive des trois méthodes.
  • isdigit() accepte les caractères décimaux ainsi que certains autres caractères considérés comme des chiffres.
  • isnumeric() est la plus large et accepte certains caractères numériques supplémentaires, notamment des fractions et d'autres caractères Unicode possédant une valeur numérique.
  • La chaîne "123" retourne True avec les trois méthodes.
  • Le caractère "²" retourne False avec isdecimal(), mais True avec isdigit() et isnumeric().
  • Le caractère "⅕" retourne False avec isdecimal() et isdigit(), mais True avec isnumeric().
  • Une chaîne vide retourne False avec les trois méthodes.
  • Les signes "+" et "-" ne sont acceptés par aucune des trois méthodes.
  • Le point d'un nombre comme "12.5" provoque également le retour de False avec les trois méthodes.
  • Un résultat True avec isdigit() ou isnumeric() ne garantit pas que int() puisse convertir directement la chaîne.

Le programme suivant résume les principales différences entre les trois méthodes.

Sortie :

 




Auteur : Younes Derfoufi
Lieu de travail : CRMEF OUJDA
Site Web : www.tresfacile.net
Chaine YouTube : https://www.youtube.com/user/InformatiquesFacile
Me contacter : https://www.tresfacile.net/me-contacter/


loader-image
Le prix initial était : € 11,00.Le prix actuel est : € 10,00.
Le prix initial était : € 6,00.Le prix actuel est : € 5,00.



Leave a Reply

Your email address will not be published. Required fields are marked *