2011-01-19 82 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