2011-05-10 201 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