2012-03-27 40 views
0

的Python我如何在Ruby中重寫這些數學python函數?

order = log(max(abs(s), 1), 10)

這是我到目前爲止,但「最大」的事情是什麼困惑我。

order = Math.log10(s.abs)

而這其中也

sign = 1 if s > 0 else -1 if s < 0 else 0

我不太知道從哪裏開始就這一個,因爲我不明白Python語法

+0

我刪除了你的標籤。這個與Mathematica有關的問題是什麼? – halirutan 2012-03-27 18:04:23

+0

在Python中,可以將'sign'標記爲'(s> 0) - (s <0)'。也許這也適用於Ruby。 – 2012-03-27 18:14:48

+0

@Sven不,這是'真假'或其他 - 甚至是那些對象。 – steenslag 2012-03-27 19:40:53

回答

4

對於第一個你要Math.logEnumerable#max

Math.log [s.abs, 1].max, 10 
Math.log10 [s.abs, 1].max # or use Math.log10 and skip passing the base 

對於以後,有幾種方式來表達它。使用if作爲表達式,使用三元運算符test ? ifval : elsval,或者最succintly的「宇宙飛船」比較<=>

sign = if s > 0 then 1 elsif s < 0 then -1 else 0 end 
sign = s > 0 ? 1 : s < 0 ? -1 : 0 
sign = s <=> 0 
+1

+1代表飛船操作員。 – steenslag 2012-03-27 18:42:37

1

max(abs(s), 1)回報abs(s)1,以較大者爲準。


sign = 1 if s > 0 else -1 if s < 0 else 0 

可以改寫爲

if s > 0: 
    sign = 1 
elif s < 0: 
    sign = -1 
else: 
    sign = 0 
4

對於第一:

Math.log10([s.abs, 1].max, 10) 

對於第二個:

sign = s > 0 ? 1 : s < 0 ? -1 : 0 

我我認爲我有這個權利。基本上,數組有一個.max方法,所以使用它。而你的使用三元語句形式:

boolean_expression ? val_if_true : val_if_false 
+0

我假設你不是這個意思,10代表log10? – Tallboy 2012-03-27 22:41:10

+1

ArgumentError:參數的錯誤數目(2代表1) – Tallboy 2012-03-27 22:41:19