二次距离

Quadratic Distance

我有一个任务有问题。我需要编写一个 python 代码来计算两点之间的二次距离。

公式为: D^2 = (x1 - x2)^2 + (y1 - y2)^2

和我的代码:

def quadratic_distance(p1: Point, p2: Point) -> float:
# YOUR CODE HERE
class p1:
    def __init__(self, x1, y1):
        self.x = x1
        self.y = y1
class p2:
    def __init__(self, x2, y2):
        self.x = x2
        self.y = y2
result1 = p1.x - p2.x 
result2 = result1**2
result3 = p1.y - p2.y
result4 = result3**2
result5 = result2 + result4
return result5

但我的问题是属性错误

AttributeError: type object 'p1' has no attribute 'x'

我是面向对象编程的新手,一直被困在这个任务上。我希望有人能帮助我

assert quadratic_distance(Point(0, 0),Point(1, 1)) == 1.75

应该是解决方案

根据你的公式,Point(0,0) 和 Point(1,1) 之间的二次距离是 2。不是 1.75

这是我的代码。试试这个

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y


P1 = Point(0,0)
P2 = Point(1,1)

def quadratic_distance(p1: Point, p2: Point) -> float:
    result1 = p1.x - p2.x 
    result2 = result1**2
    result3 = p1.y - p2.y
    result4 = result3**2
    result5 = result2 + result4
    return result5

print(quadratic_distance(P1, P2))

您收到错误消息,因为您尚未创建 class 的对象。在 python 中,x 不是 class 的属性,但 x 是其对象的属性。

所以你可以这样做:

class p1:
    def __init__(self, x1, y1):
        self.x = x1
        self.y = y1
class p2:
    def __init__(self, x2, y2):
        self.x = x2
        self.y = y2

p1_obj = p1(5,5)  
p2_obj = p2(10,10)   
result1 = p1_obj.x - p2_obj.x 
result2 = result1**2
result3 = p1_obj.y - p2_obj.y
result4 = result3**2
result5 = result2 + result4
return results

您可以进一步改进它,因为 p1 和 p2 具有相同的属性(数据成员和成员函数),因此我们可以只使用一个 class 命名为 p(或任何其他名称)并创建两个对象 p1 和class

的 p2

虽然您已经声明了 class p1 和 p2 但您还没有创建任何对象。所以,你收到了这个错误。 x 和 y 是 class p1 和 p2 的实例,您无法通过它们的 class 名称访问它们。 要么将 x 和 y 定义为 class 中的 class 变量,要么为 class p1 和 p2 分别定义一个对象,如下所示。 p1ob=p1(4,5) p2ob=p2(5,6)