比较并减少两个数字之间的差异,无论哪个数字较大

Comparing and reducing difference between two numbers regardless of which is larger

我正在使用 abs 内置函数来测量两个数字之间的差异,无论 x 是否大于 y 或反之亦然。

例如,如果 y = 5x = 7,结果将是 2。如果 y = 7x = 5,结果仍然是 2.

但是如果我想迭代直到结果是 0,有没有办法我可以使用 abs 或不同的内置函数以便 yx 可以递增或递减,以便结果为 0?

我喜欢 abs 函数,但是编写必须检查 y 是否大于 x 或反之以递增或递减的代码似乎很遗憾直到相差 0.

如果你真的想避免条件语句:

while abs(x-y) > 0:

    # do something

    sgn = (x-y)/abs(x-y)
    x += max(0, -sgn) - max(0, sgn)
if x > y: x, y = y, x   # swap x and y if x > y
for x in range(x, y+1):
    diff = y-x

很简单。请注意,一个 if-statement 可以节省 Nabs 的调用(其中 N = abs(y-x))。所以我认为你应该更喜欢 if-statement 而不是试图避免它。


因为你没有指定你是想递增(较小的)还是递减 (较大的)大概是一个,您可能只对差异感兴趣。在那种情况下,你 可以使用:

for diff range(abs(y-x), -1, -1):
    ...