二次距离

2024-06-17 14:47:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个任务的问题。我需要编写一个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

这应该是解决办法


Tags: 代码selfinitdefclassdistancepointx1
3条回答

虽然您已经声明了类p1和p2,但还没有创建任何对象。所以,您得到了这个错误。 x和y是类p1和p2的实例,您不能通过它们的类名访问它们。 可以将x和y定义为类内的类变量,也可以定义类p1和p2中的每个对象,如下所示。 p1ob=p1(4,5) p2ob=p2(5,6)

由于尚未创建该类的对象,因此出现错误。在python中,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具有相同的属性(数据成员和成员函数),所以我们可以只使用一个名为p的类(或任何其他名称),并创建该类的两个对象p1和p2

根据您的公式,点(0,0)和点(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))

相关问题 更多 >