2011-05-10 4 views
3

Existe-t-il un moyen rapide de trouver si une chaîne est un nombre réel, à moins de le lire un caractère à la fois et de faire isdigit() sur chaque caractère? Je veux être en mesure de tester les nombres à virgule flottante, par exemple 0.03001.Vérifiez si la chaîne est un nombre réel

+3

Définir l'expression "un nombre réel". Entier ou virgule flottante? Signé ou non signé? etc – delnan

Répondre

12

Si vous voulez dire un flotteur comme un nombre réel cela devrait fonctionner:

def isfloat(str): 
    try: 
     float(str) 
    except ValueError: 
     return False 
    return True 

Notez que cela boucle interne toujours votre chaîne, mais cela est inévitable.

+0

merci mais j'ai besoin de faire des flottants, donc je suppose que je pourrais remplacer l'essayer: int (str) avec try: float (str)? – Illusionist

+0

Oui. (10 char limite lol) – orlp

+2

* caveat *: N'utilisez pas une clause 'except' couverture! C'est une mauvaise pratique dangereuse. Attrapez 'ValueError' explicitement. – Santa

7
>>> a = "12345" # good number 
>>> int(a) 
12345 
>>> b = "12345G" # bad number 
>>> int(b) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for int() with base 10: '12345G' 

Vous pouvez le faire:

def isNumber(s): 
    try: 
     int(s) 
    except ValueError: 
     return False 
    return True 

Si vous voulez un nombre flottant, par float remplacer int (grâce à @cobbal).

+2

et si vous voulez tester floats, remplacer 'int' par float ' – cobbal

+0

Peut-être que vous devriez utiliser" charger de nouvelles réponses "la prochaine fois, puisqu'il s'agit d'une copie EXACTE de ma réponse. – orlp

+0

@nightcracker pas vraiment exact, j'ai fait un exemple. – bfontaine

1

Il y a aussi une autre façon en utilisant l'expression régulière:

import re 

def is_float(str): 
    if re.match(r"\d+\.*\d*", str): 
     return True 
    else: 
     return False 
+0

Cela ne fonctionne pas avec les nombres négatifs. – bfontaine

0

Méthode de vérifier nombre réel:

def verify_real_number(item): 
""" Method to find if an 'item'is real number""" 

item = str(item).strip() 
if not(item): 
    return False 
elif(item.isdigit()): 
    return True 
elif re.match(r"\d+\.*\d*", item) or re.match(r"-\d+\.*\d*", item): 
    return True 
else: 
    return False 
Questions connexes