2017-01-29 35 views
1

我正在編寫用於檢查一對數字是否爲有效座標的腳本。我需要檢查數字是否僅以小數表示,並且在經度0到180正值或負值範圍內,以及緯度0到90正值或負值範圍內。 我用一個try/except塊來檢查,如果數字是浮點這樣的:檢查字符串是否爲浮點數僅表示爲十進制數

def isFloat(n): 
    try: 
     float(n) 
     return True 
    except ValueError: 
     return False 

雖然這主要是工作,我希望它僅接受作爲小數和False表示彩車沒有價值一樣True1e1NaN

+0

令人驚訝的,這是_not_重複! +1! –

回答

1

你可以使用一個相當簡單的regular expression

import re 

def isFloat(n): 
    n = str(n) # optional; make sure you have string 
    return bool(re.match(r'^-?\d+(\.\d+)?$', n)) # bool is not strictly necessary 
    #^  string beginning 
    # -?  an optional - 
    # \d+  followed by one or more digits (\d* if you want to allow e.g. '.95') 
    # (\.\d+)? followed by an optional group of a dot and one or more digits 
    # $   string end 

>>> isFloat('4') 
True 
>>> isFloat('4.567') 
True 
>>> isFloat('-4.567') 
True 
>>> isFloat('-4.') 
False 
>>> isFloat('-4.45v') 
False 
>>> isFloat('NaN') 
False 
>>> isFloat('1e1') 
False 
+0

我會改變第一個'd +'到'd *'來捕捉像'.985'這樣的值。另外,雖然我認爲這個解決方案對於海報的需求來說是最好的,但它確實需要將'n'(被投射)一個字符串。 –

+0

恐怕我只是一個新手,所以你能解釋一下這是如何工作的嗎? –

+0

@TirthJain我添加了一些解釋,並將鏈接添加到pythons'regex'模塊的文檔中。至於正則表達式語法的來龍去脈,您應該閱讀文檔或做一個教程;) – schwobaseggl

相關問題