我從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語句解決這一點,但它會很長,還有什麼其他方法對這個問題???
我從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語句解決這一點,但它會很長,還有什麼其他方法對這個問題???
這個問題可以大大簡化,不失一般性,通過排序:
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
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
您可以發佈您的嘗試? – Blender
注:在問題描述中是一個非常好的線索。 – Patashu