Comment détecter des chiffres ou des lettres dans une chaîne? Je sais que vous utilisez les codes ASCII, mais quelles fonctions en tirent parti?
Vous pouvez utiliser str.isdigit()
et str.isalpha()
vérifier si la chaîne donnée est positif entier et alphabet respectivement.
Exemples de résultats:
# For alphabet
>>> 'A'.isdigit()
False
>>> 'A'.isalpha()
True
# For digit
>>> '1'.isdigit()
True
>>> '1'.isalpha()
False
str.isdigit()
renvoie False
si la chaîne est un nombre négatif ou un nombre flottant. Par exemple:
# returns `False` for float
>>> '123.3'.isdigit()
False
# returns `False` for negative number
>>> '-123'.isdigit()
False
Si vous voulez vérifiez également les entiers négatif et float
, vous pouvez écrire une fonction personnalisée dans vérifier comme:
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
Exemple de cycle:
>>> 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
Les fonctions ci-dessus renverront True
pour la chaîne "NAN" (pas un nombre) car pour Python, il s'agit d'un flottant valide, ce qui signifie qu'il ne s'agit pas d'un nombre. Par exemple:
>>> is_number('NaN')
True
Afin de vérifier si le numéro 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 de bibliothèque supplémentaire pour vérifier cela, vous pouvez simplement le vérifier en le comparant avec lui-même en utilisant ==
. Python renvoie False
lorsque nan
float est comparé à lui-même. Par exemple:
# `nan_num` variable is taken from above example
>>> nan_num == nan_num
False
Par conséquent, ci-dessus la fonction is_number
peut être mise à jour pour renvoyer False
pour "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
Exemple de cycle:
>>> 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
La fonction ci-dessus vous retournera quand même False
pour le nombres complexes . Si vous voulez que votre fonction is_number
_ traite les nombres complexes comme un nombre valide , vous devez alors entrer la chaîne que vous avez passée en tant que complex()
au lieu de float()
. Ensuite, votre fonction is_number
ressemblera à ceci:
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
Exemple de cycle:
>>> 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 numéro, s'accompagne d'une surcharge supplémentaire. Choisissez la version de la fonction is_number
correspondant à vos besoins.
Pour une chaîne de longueur 1, vous pouvez simplement effectuer isdigit()
ou isalpha()
Si la longueur de votre chaîne est supérieure à 1, vous pouvez créer une fonction similaire à ..
def isinteger(a):
try:
int(a)
return True
except ValueError:
return False