2012-02-26 40 views
0

我正在计算python中的一段线段的长度,但我不明白为什么一段代码给我零,另一段给出了正确的答案。python bug中的距离公式

这段代码给了我零:

def distance(a, b): 
    y = b[1]-a[1] 
    x = b[0]-a[0] 
    ans=y^2+x^2 
    return ans^(1/2) 

这一次给了我正确的答案:

import math as math 

def distance(a, b): 
    y = b[1]-a[1] 
    x = b[0]-a[0] 
    ans=y*y+x*x 
    return math.sqrt(ans) 

谢谢。

+0

为什么使用'^'运算符?你认为那个操作员做什么? – 2012-02-26 15:02:49

回答

8

在你的第一个片段,你写了这个:

ans^(1/2) 

在Python幂运算符是^,这就是XOR - 运算符。 Python中的电源运算符是**。最重要的是,在Python 2.x默认情况下,两个整数的除法结果是一个整数,因此1/2将评估为0。正确的方法应该是这样:

ans ** 0.5 

而另一件事,你在这里实现的功能可以做很多更容易math.hypot

import math 

def distance(a, b): 
    return math.hypot(b[0] - a[0], b[1] - a[1]) 
0

尝试做x**2而不是x^2(这是XOR )

或者使用math.pow功能

并且也1/2为0而不是0.5