Квадратичное расстояние

#python #class #oop #point

#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
 

должно быть решение

Комментарии:

1. Вы переписали два точечных параметра, переданных вашей функции, с помощью двух бесполезных повторяющихся определений классов. Point где-то уже есть определение (в противном случае вызывающий вашу функцию не смог бы создать два экземпляра для передачи в качестве параметров), вам не нужно повторять это самостоятельно.

2. О, я понимаю. Там была моя проблема. Я был немного сбит с толку с помощью p1 и p2.

Ответ №1:

Согласно вашей формуле, квадратичное расстояние между точкой (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))
 

Комментарии:

1. Вы правы, расстояние должно быть 2, а не 1,75. Ваш код сработал, большое вам спасибо.

Ответ №2:

Вы получаете сообщение об ошибке, потому что вы не создали объект класса. В python x не является атрибутом класса, а 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

Ответ №3:

Хотя вы объявили классы p1 и p2, но вы не создали никакого объекта. Итак, вы получаете эту ошибку. x и y — это экземпляры классов p1 и p2, к которым вы не можете получить доступ по имени их класса. Либо определите x и y как переменные класса внутри класса, либо определите объект каждого из классов p1 и p2, как указано ниже. p1ob = p1 (4,5) p2ob = p2 (5,6)