2013-05-29 59 views
2

我從CodingBat替代方法來比較值

鑑於3個整數想這個問題,農行,返回真,如果B或C的一個是「關閉」(最多通過 不同1),而,其他是「遠」,不同於其他值2或 更多。注意:abs(num)計算一個數字的絕對值。

close_far(1, 2, 10) → True 
close_far(1, 2, 3) → False 
close_far(4, 1, 3) → True 

我知道我可以通過一系列的if else語句解決這一點,但它會很長,還有什麼其他方法對這個問題???

+0

您可以發佈您的嘗試? – Blender

+2

注:在問題描述中是一個非常好的線索。 – Patashu

回答

6

這個問題可以大大簡化,不失一般性,通過排序:

def close_far(a, b, c): 
    x, y, z = sorted([a, b, c]) 
    delta_close, delta_far = sorted([y - x, z - y]) 
    return delta_close <= 1 and delta_far >= 2 
1
def close_far(a, b, c): 
    def close(x, y): return abs(x - y) <= 1 
    def far(x, y): return abs(x - y) >= 2 
    return (close(b, a) and far(c, a) and far(c, b) or 
      close(c, a) and far(b, a) and far(b, c)) 

>>> close_far(1, 2, 10) 
True 
>>> close_far(1, 2, 3) 
False 
>>> close_far(4, 1, 3) 
True 
+0

可能更好地使用顯式元素來組合'snd'和'or'運算符,當然它是正確的寫法。 – Dougal

+1

@ user2284926我希望你看看wim的方法,它更適應性強 – jamylak