比较价值的替代方法

use*_*926 3 python algorithm

我正在尝试来自CodingBat的这个问题

给定三个整数,abc,如果b或c中的一个是"接近"(最多相差1),则返回True,而另一个是"远",与其他值相差2或更多.注意:abs(num)计算数字的绝对值.

close_far(1, 2, 10) ? True
close_far(1, 2, 3) ? False
close_far(4, 1, 3) ? True 
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过一系列if else语句来解决这个问题,但它真的很长,有没有其他方法来解决这个问题?

wim*_*wim 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
Run Code Online (Sandbox Code Playgroud)