3

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

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

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

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

4

4 回答 4

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
于 2013-05-29T05:59:18.150 回答
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
于 2013-05-29T05:51:51.767 回答
0

这是一种方法:

def close_far(a, b, c):
    return not ((is_close(a,b)==is_close(a,c)) or is_close(b,c))


def is_close(num1, num2):
    return abs(num1-num2)<=1
于 2019-04-12T18:40:07.803 回答
0

一点帮助:

def close_far(a, b, c): return ((abs(a-c) >= 2 and abs(a-b) <= 1) and (abs(b-c) >= 2)) or ((abs(a-c) <= 1 and abs(a-b) >= 2) and (abs(b-c) >= 2))

于 2018-10-23T19:01:02.693 回答