Détecter si une chaîne de Python est un nombre ou une lettre [dupliquer]
Cette question a déjà une réponse ici:
- Comment vérifier si le caractère dans string est une lettre? Python 3 réponses
- Comment puis-je vérifier si une chaîne est un nombre (float)? 31 réponses
Comment puis-je détecter des nombres ou des lettres dans une chaîne? Je sais que vous utilisez les codes ASCII, mais quelles fonctions en profitent?
2 réponses
vérifiez si string est positif chiffre (entier) et alphabet
Vous pouvez utiliser str.isdigit()
et str.isalpha()
pour vérifier si la chaîne est positif integer et alphabet respectivement.
Exemples De Résultats:
# For alphabet
>>> 'A'.isdigit()
False
>>> 'A'.isalpha()
True
# For digit
>>> '1'.isdigit()
True
>>> '1'.isalpha()
False
vérifier si les chaînes sont positives/négatives-integer / float
str.isdigit()
retourne False
si la chaîne est un négative nombre ou un nombre à virgule. Par exemple:
# returns `False` for float
>>> '123.3'.isdigit()
False
# returns `False` for negative number
>>> '-123'.isdigit()
False
Si vous voulez vérifiez également le négative nombres entiers et float
, vous pouvez écrire une fonction personnalisée pour vérifier que:
def is_number(n):
try:
float(n) # Type-casting the string to `float`.
# If string is not a valid `float`,
# it'll raise `ValueError` exception
except ValueError:
return False
return True
Echantillonnage:
>>> is_number('123') # positive integer number
True
>>> is_number('123.4') # positive float number
True
>>> is_number('-123') # negative integer number
True
>>> is_number('-123.4') # negative `float` number
True
>>> is_number('abc') # `False` for "some random" string
False
Jeter "NaN (pas un nombre) des chaînes lors de la vérification pour le nombre
Les fonctions ci-dessus sera de retour True
pour la " NAN "(pas un nombre) string parce que pour Python il est valide float représentant il n'est pas un nombre. Par exemple:
>>> is_number('NaN')
True
pour vérifier si le nombre est "NaN", vous pouvez utiliser math.isnan()
comme:
>>> import math
>>> nan_num = float('nan')
>>> math.isnan(nan_num)
True
Ou si vous ne souhaitez pas importer bibliothèque supplémentaire pour vérifier ceci, alors vous pouvez simplement vérifier par comparaison avec lui-même à l'aide de ==
. Python returns False
quand nan
le flotteur est comparé à lui-même. Pour exemple:
# `nan_num` variable is taken from above example
>>> nan_num == nan_num
False
par conséquent, au-dessus de function is_number
peut être mis à jour pour revenir False
"NaN"
comme:
def is_number(n):
is_number = True
try:
num = float(n)
# check for "nan" floats
is_number = num == num # or use `math.isnan(num)`
except ValueError:
is_number = False
return is_number
Echantillonnage:
>>> is_number('Nan') # not a number "Nan" string
False
>>> is_number('nan') # not a number string "nan" with all lower cased
False
>>> is_number('123') # positive integer
True
>>> is_number('-123') # negative integer
True
>>> is_number('-1.12') # negative `float`
True
>>> is_number('abc') # "some random" string
False
permettre que des nombres complexes comme "1+2j" soient traités comme des nombres valides
La fonction ci-dessus retournera toujours vous False
pour les nombres complexes. Si vous voulez que votre is_number
fonction à traiter nombres complexes comme nombre valide, alors vous devez taper cast votre chaîne passée à complex()
au lieu de float()
. Ensuite, votre is_number
fonction ressemble à:
def is_number(n):
is_number = True
try:
# v type-casting the number here as `complex`, instead of `float`
num = complex(n)
is_number = num == num
except ValueError:
is_number = False
return is_number
Echantillonnage:
>>> is_number('1+2j') # Valid
True # : complex number
>>> is_number('1+ 2j') # Invalid
False # : string with space in complex number represetantion
# is treated as invalid complex number
>>> is_number('123') # Valid
True # : positive integer
>>> is_number('-123') # Valid
True # : negative integer
>>> is_number('abc') # Invalid
False # : some random string, not a valid number
>>> is_number('nan') # Invalid
False # : not a number "nan" string
PS: chaque opération pour chaque contrôle en fonction du type de nombre est livré avec frais généraux supplémentaires. Choisissez la version de is_number
fonction qui s'adapte à votre exigence.
Pour une chaîne de longueur 1, vous pouvez simplement effectuer isdigit()
ou isalpha()
si la longueur de votre chaîne de caractères est supérieure à 1, vous pouvez faire quelque chose comme une fonction..
def isinteger(a):
try:
int(a)
return True
except ValueError:
return False