Как мне переписать эти математические функции Python в ruby? - PullRequest
0 голосов
/ 27 марта 2012

Python

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

Это то, что у меня есть до сих пор, но вещь "max" меня смущает.

order = Math.log10(s.abs)

И этот тоже

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

Я не совсем уверен, с чего начать, так как не понимаю синтаксис Python

Ответы [ 3 ]

4 голосов
/ 27 марта 2012

Для первого:

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

Для второго:

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

Я думаю, что понял, хе.В основном, у массивов есть метод .max, так что используйте его.А вы пользуетесь троичными утверждениями в виде:

boolean_expression ? val_if_true : val_if_false
4 голосов
/ 27 марта 2012

Для первого вы хотите Math.log и Enumerable # 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 или, самое короткое, компаратор "космического корабля" <=>

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 голос
/ 27 марта 2012

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
...