Python 使用距离公式计算两点之间的距离

Python 使用距离公式计算两点之间的距离,python,wing-ide,Python,Wing Ide,所以我需要计算当前点和参数中指定的另一点之间的距离&返回计算的距离 我的打印报表需要如下所示: > print p1.distance(p2) 5.0 我当前的代码: import math class Geometry (object): next_id = 0 def __init__(self): self.id = Geometry.next_id Geometry.next_id += 1 geo1 = Geometry

所以我需要计算当前点和参数中指定的另一点之间的距离&返回计算的距离

我的打印报表需要如下所示:

> print p1.distance(p2)   
5.0
我当前的代码:

import math

class Geometry (object):
    next_id = 0
    def __init__(self):
        self.id = Geometry.next_id
        Geometry.next_id += 1

geo1 = Geometry()
print geo1.id
geo2 = Geometry()
print geo2.id

class Point(Geometry):
    next_id = 0

    def __init__(self,x,y,):
        self.x = x
        self.y = y
        self.id = Point.next_id
        Point.next_id += 1  

    def __str__(self):
        return "(%0.2f, %0.2f)" % (self.x, self.y)

    def identify():
        if(p0.id == p1.id):
            print "True"
        else:
            print "False"

    def equality():
        if (self.x == self.y):
            print "True"
        else:
            print "False"  

    def distance(p0, p1):
        p1 = pts1
        pts1 = [(7.35,8.20)]
        p0 = pts0
        pts0 = [(5,5)]
        dist = math.sqrt((p0[0] - p1[0])**2 + (p0[1] - p1[1])**2)
        return dist

p0 = Point(5,5)
print p0.id
p1 = Point(7.35,8.20)
print p1.id
print p1
print p0 == p1
print p0.id == p1.id
我不知道如何在我的Point类中分离x&y值,以便在方程式中使用

def distance(self, other):
    return math.sqrt((self.x - other.x)**2 + (self.y - other.y)**2)
您从未为
某个点[index]
定义行为,因此失败。以保存变量的方式访问变量


您从未为
某个点[index]
定义行为,因此失败。以保存变量的方式访问变量。

应使用
p0.x
p0.y
p1.x
p1.y
。但是您不应该覆盖参数变量

def distance(p0, p1):
    dist = math.sqrt((p0.x - p1.x)**2 + (p0.y - p1.y)**2)
    return dist

您应该使用
p0.x
p0.y
p1.x
p1.y
。但是您不应该覆盖参数变量

def distance(p0, p1):
    dist = math.sqrt((p0.x - p1.x)**2 + (p0.y - p1.y)**2)
    return dist

你的
distance
方法应该在它自己的点(
self
,就像你在
\uuuu str\uuuu
中所做的那样)和另一个点(也可以称之为
p
,或者类似于
other
)上运行

示例用法:

p0 = Point(2, 4)
p1 = Point(6, 1)
print(str(p0.distance(p1)))
# 5.0

你的
distance
方法应该在它自己的点(
self
,就像你在
\uuuu str\uuuu
中所做的那样)和另一个点(也可以称之为
p
,或者类似于
other
)上运行

示例用法:

p0 = Point(2, 4)
p1 = Point(6, 1)
print(str(p0.distance(p1)))
# 5.0


您在
\uuu str\uuuu
方法中完全可以做到这一点……您的
p1=pts1
代码在声明变量之前分配了
pts1
,这发生在下一行。为什么要给参数变量赋值
p0
p1
?为什么
类自己赋值
self.id
,不只是调用父类的
\uuuuu init\uuuu
方法?在
\uuuuu str\uuuu
方法中完全可以做到这一点……您的
p1=pts1
代码在声明
pts1
变量之前分配它,这发生在下一行。为什么要给参数变量赋值
p0
p1
?为什么
类自己赋值
self.id
而不是只调用父类的
\uuu init\uuuu
方法?这是一个包含两个点的模块级函数吗,或者这是一种只取一个点的方法(并使用
p0
作为
p1
的同义词)?或者它只是缺少了
@staticmethod
?它是一个类方法,
p0
是调用该方法的对象。这只是一个惯例,叫它
self
。我想我可能违反了PEP8规则。我只是从OP的代码中复制了这一点。我最初打算忽略它,因为它只是一个PEP-8的吹毛求疵。然后我认为您缺少了
@staticmethod
。然后我想你已经把它移到了模块级别,并把它变成了一个函数。然后我意识到我只是在猜测,于是停下来问路。(为了记录在案,我认为OP使用了
p0
,这表明他或她对方法的第一个参数是如何工作的感到困惑。这就是为什么我在回答中将它改为
self
——使它看起来更像是被理解的
\u str\u
方法。)我承认我一点也没想过。我刚才正在解决OP访问
x
y
属性的问题。这是一个取两点的模块级函数,还是一个取一点的方法(并使用
p0
作为
p1
的同义词)?或者它只是缺少了
@staticmethod
?它是一个类方法,
p0
是调用该方法的对象。这只是一个惯例,叫它
self
。我想我可能违反了PEP8规则。我只是从OP的代码中复制了这一点。我最初打算忽略它,因为它只是一个PEP-8的吹毛求疵。然后我认为您缺少了
@staticmethod
。然后我想你已经把它移到了模块级别,并把它变成了一个函数。然后我意识到我只是在猜测,于是停下来问路。(为了记录在案,我认为OP使用了
p0
,这表明他或她对方法的第一个参数是如何工作的感到困惑。这就是为什么我在回答中将它改为
self
——使它看起来更像是被理解的
\u str\u
方法。)我承认我一点也没想过。我只是在解决OP访问
x
y
属性的问题。