найти расстояние между двумя точками в python, передавая данные через два разных объекта - PullRequest
0 голосов
/ 24 апреля 2020

Мне нужно написать код, чтобы найти разницу между двумя точками, передав значение через два объекта, как показано ниже. Но я получаю TypeError: init () отсутствует 3 обязательных позиционных аргумента: 'x', 'y' и 'z'

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

    def __str__(self):
        return '(point: {},{},{})'.format(self.x, self.y, self.z)

    def distance(self, other):
        return sqrt( (self.x-other.x)**2 + (self.y-other.y)**2 + (self.z -other.z)**2 )      


p = Point()

p1 = Point(12, 3, 4)

p2 = Point(4, 5, 6)

p3 = Point(-2, -1, 4)

print(p.distance(p1,p3))

Ответы [ 3 ]

0 голосов
/ 24 апреля 2020
class Point:
    def __init__(self, x, y,z):
        self.x = x
        self.y = y
        self.z = z

    def __str__(self):
        return '(point: {},{},{})'.format(self.x, self.y, self.z)

    def distance(self, other):
        return math.sqrt( (self.x-other.x)**2 + (self.y-other.y)**2 + (self.z -other.z)**2 )

p1 = Point(12, 3, 4)

p2 = Point(4, 5, 6)

p3 = Point(-2, -1, 4)

print(Point.distance(p1,p3))

Это работает следующим образом. Вам не следует определять P точку отдельно от трех других точек. Каждая точка - это отдельный экземпляр. Но когда вы попытаетесь использовать функцию, просто вызовите класс.

0 голосов
/ 24 апреля 2020

Проблема возникает из этой строки:

p = Point()

Когда вы определили свой класс, вы указали, что для его инициализации необходимо передать 3 параметра (def __init__(self, x, y,z)).

Если вы все еще хотите иметь возможность создавать этот объект Point без необходимости передавать эти 3 параметра, вы можете сделать их необязательными, например, так:

def __init__(self, x=0, y=0, z=0):
    self.x = x
    self.y = y
    self.z = z

Таким образом, если вы не указали эти параметры ( как и вы), по умолчанию будет создана точка с координатами {0, 0, 0}.

0 голосов
/ 24 апреля 2020

Вы не передаете необходимые 3 аргумента для p = Point()

исправили свои ошибки

from math import sqrt
class Point:
    def __init__(self, x, y,z):
        self.x = x
        self.y = y
        self.z = z

    def __str__(self):
        return '(point: {},{},{})'.format(self.x, self.y, self.z)

    def distance(self, other):
        return sqrt( (self.x-other.x)**2 + (self.y-other.y)**2 + (self.z -other.z)**2 )      


# p = Point() # not required

p1 = Point(12, 3, 4)

p2 = Point(4, 5, 6)

p3 = Point(-2, -1, 4)

print(p1.distance(p3)) # use this to find distance between p1 and any other point

# or use this
print(Point.distance(p1,p3))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...