2016-11-07 56 views
1

所以我的代碼應該處理線,看是否有線路座標如何檢查是否字符串在Python中

"x y z" 

例如座標特定的格式:

1.500 -6.002 0.007 

用數字表示符號,如果是的話,我會處理這條線,但如果沒有,我會保持它不變。我認爲這將是正確的工具,但基於過去已經發生的不同情況,我對新技術太陌生了。

+0

我可以添加一個浮動檢查,如果符號inbetween座標浮動是「」而不是「;」? (我有點兒睡不着,對不起) – Grak

回答

2

正則表達式不是查看數字是否爲浮點數的最佳選擇。考慮到有效的浮點數可以採用的所有可能的形式,並且可能在未來的Python版本中使用,這很複雜。

因此,它更好地嘗試來轉換它,看看如果Python可以做到這一點,捕捉異常,如果它不能。

我會這樣象下面這樣:

def check_line(line_coord): 
    try: 
     return len([float(x) for x in line_coord.split()])==3 
    except ValueError: 
     return False 
  • 創建就行分裂浮充轉換列表理解根據空間
  • 檢查,如果該列表的長度等於3:返回True如果確定
  • 保護,通過一個ValueError例外,返回False如果異常捕獲

測試:

print(check_line("10 4.5dd 5.6")) # bogus float in 2nd position 
print(check_line("10 5.6")) # only 2 fields 
print(check_line("10 -40 5.6")) # 3 fields, all floats 

False 
False 
True 

編輯:這僅上述檢查如果值在這裏。耶提出了一個方法,返回三重或None如果錯誤,像這樣:

def check_line(line_coord): 
    try: 
     x,y,z = map(float,line_coord.split()) 
     return x,y,z 
    except ValueError: 
     return None 

map是更快,因爲它不會產生一個臨時列表)。與以前相同的測試我們得到:

None 
None 
(10.0, -40.0, 5.6) 
+0

你可以做'try:x,y,z = map(float,line.split());返回x,y,z; ValueError除外:return None' – dawg

相關問題