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 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?

17
demandé sur Josh Caswell 2016-10-18 03:15:58

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.

33
répondu Moinuddin Quadri 2018-05-14 01:36:39

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
2
répondu esquarer 2016-10-18 00:45:43