2016-03-15 47 views
-3

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

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

但是如果我想重复,直到结果0,是有办法,我可以使用abs或不同的内置使yx可以递增或递减,这样的结果将是0

我喜欢abs功能,但它似乎是一个耻辱写出具有检查y是否码大于x,反之亦然,以递增或递减,直到差是0

+3

您想达到什么目的?你最终想要'x = 6'还是'y = 6',或者只要两个都相等,你会不在意?你有什么尝试 - 例如,为什么不选择一个,增加它,然后切换到递减,如果差异变大? – jonrsharpe

+0

'x,y = sorted([x,y])',现在总是把'x'视为较小的值......! – deceze

+0

谢谢,可以试试这个。 – SamChancer

回答

1
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): 
    ... 
+0

谢谢,会试试这个。 – SamChancer

1

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

while abs(x-y) > 0: 

    # do something 

    sgn = (x-y)/abs(x-y) 
    x += max(0, -sgn) - max(0, sgn)