2011-05-10 159 views
3

有没有一种快速的方法来查找字符串是否是实数,缺少一次读取字符并在每个字符上执行isdigit()?我希望能够测试浮点数,例如0.03001检查字符串是否是实数

+3

定义 “实数”。整数或浮点数?签名或未签名?等 – delnan 2011-05-10 20:45:48

回答

12

如果你的意思是一个浮动的实数,这应该工作:

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

注意,这将内部仍然环路你的字符串,但这是不可避免的。

+0

谢谢,但我需要做浮动,所以我想我可以代替try:int(str)与try:float(str)? – Illusionist 2011-05-10 20:50:45

+0

是的。 (10字符限制大声笑) – orlp 2011-05-10 20:51:33

+2

*警告*:不要使用毯子'except'子句!这是一个危险的坏习惯。显式捕获'ValueError'。 – Santa 2011-05-10 20:55:31

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' 

你可以这样做:

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

如果你想有一个浮点数,通过float更换int(感谢@cobbal)。

+2

如果要测试浮点数,请将'int'替换为float ' – cobbal 2011-05-10 20:51:43

+0

也许你应该在下次使用“加载新答案”,因为这是我的答案的完全副本。 – orlp 2011-05-10 20:52:15

+0

@nightcracker并不确切,我举了一个例子。 – bfontaine 2011-05-10 20:54:39

1

也有使用正则表达式的另一种方式:

import re 

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

这不适用于负数。 – bfontaine 2013-11-19 23:00:37

0

方法来验证实数:

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