我正在尝试来自CodingBat的这个问题
给定三个整数,一个b c,如果b或c中的一个是“接近”,则返回True(不同于 最多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 :(得分: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 :(得分: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
答案 2 :(得分: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))
答案 3 :(得分: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