2011-01-19 85 views
4

在Python中使用sqrt函数时,我遇到了“distance ValueError: math domain error”的问题。sqrt:ValueError:数学域错误

这里是我的代码:

from math import sqrt 

def distance(x1,y1,x2,y2): 
    x3 = x2-x1 
    xFinal = x3^2 
    y3 = y2-y1 
    yFinal = y3^2 
    final = xFinal + yFinal 
    d = sqrt(final) 
    return d 
+4

如何与下面一行将最后七行代码的? `return sqrt((x2 - x1)** 2 +(y2 - y1)** 2)` - 您的代码会更清晰,因为您将使用更少的变量。 – eumiro 2011-01-19 12:57:35

回答

6

幂函数在Python是**,不^(这是按位异或)。因此,使用x3**2

11

你的问题是在Python是使用幂和a ** ba^b完成(^是按位异或),这将导致最终成为负值,这将导致域错误。

您的固定代码:

def distance(x1, y1, x2, y2): 
    return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** .5 # to the .5th power equals sqrt 
+0

如果你想改进OP的代码,你可能会重新编写它,而不是完全可怕。见eumiro的评论。 – SilentGhost 2011-01-19 13:02:37