比较并减少两个数字之间的差异,无论哪个数字较大
Comparing and reducing difference between two numbers regardless of which is larger
我正在使用 abs
内置函数来测量两个数字之间的差异,无论 x
是否大于 y
或反之亦然。
例如,如果 y = 5
和 x = 7
,结果将是 2
。如果 y = 7
和 x = 5
,结果仍然是 2
.
但是如果我想迭代直到结果是 0
,有没有办法我可以使用 abs
或不同的内置函数以便 y
或 x
可以递增或递减,以便结果为 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
可以节省 N
对 abs
的调用(其中 N = abs(y-x)
)。所以我认为你应该更喜欢 if-statement
而不是试图避免它。
因为你没有指定你是想递增(较小的)还是递减
(较大的)大概是一个,您可能只对差异感兴趣。在那种情况下,你
可以使用:
for diff range(abs(y-x), -1, -1):
...
我正在使用 abs
内置函数来测量两个数字之间的差异,无论 x
是否大于 y
或反之亦然。
例如,如果 y = 5
和 x = 7
,结果将是 2
。如果 y = 7
和 x = 5
,结果仍然是 2
.
但是如果我想迭代直到结果是 0
,有没有办法我可以使用 abs
或不同的内置函数以便 y
或 x
可以递增或递减,以便结果为 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
可以节省 N
对 abs
的调用(其中 N = abs(y-x)
)。所以我认为你应该更喜欢 if-statement
而不是试图避免它。
因为你没有指定你是想递增(较小的)还是递减 (较大的)大概是一个,您可能只对差异感兴趣。在那种情况下,你 可以使用:
for diff range(abs(y-x), -1, -1):
...