#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)