2017-05-26 43 views
0

在Python中,一個可以通過只用該字符串調用浮動構造函數把字符串轉換成浮動:擴展浮法解析 - 自動解析PI

>>> float('3.14') 
3.14 

不過,我想能夠同時解析字符串'pi'math.pi,而不僅僅是普通的'pi',而且還有'-pi'以及浮點解析的所有內容(即實際數字之前和之後的空格無關緊要)。我應該自己編寫它,我將不得不重新實現很多原來的浮動解析邏輯,我顯然不想要。有沒有已經存在的函數或庫可以做到這一點?

+1

你可以只調用'浮動(X)''如果是x'不是' 'pi''或'' -pi'' ,不需要重新實現浮點解析邏輯。 – kennytm

+0

@kennytm不是,因爲它不僅僅是「pi'''還有」pi'''''''''''''''''''以相同的方式對待任何其他號碼,包括該號碼之前和/或之後的空格可以在那裏,並且該事物仍然成功解析。 – zegkljan

+0

如果空格有問題,那麼首先調用'x = x.strip()'(或者甚至調用'.lower()'),這對於自己來說仍然是可管理的。 – kennytm

回答

2

自己寫。剝離後,您可以檢查輸入是否爲字符串"pi"。如果不是,轉發給原來的float打電話。

import math 

def float_or_pi(x): 
    x = x.strip().lower() 
    if x in ('pi', '+pi'): 
     return math.pi 
    elif x == '-pi': 
     return -math.pi 
    else: 
     return float(x) 


assert float_or_pi(' PI ') == math.pi 
assert float_or_pi(' 3.25 ') == 3.25 

# (off-topic note: don't try to `==` floats at home.) 
0

你可以使用拉姆達一個襯墊功能

get_value = lambda x : math.pi if x == 'pi' else (-math.pi if x == '-pi' else float(x)) get_value('pi') get_value('-pi') get_value('4.3')