Я должен выполнить сложение на трехмерном векторе.Переменная vector является списком - PullRequest
0 голосов
/ 07 июня 2018
class Vector:
    def __init__(self, vector):
        self.vector = vector


    def __eq__(self, other):   
        return self.vector==other.vector

#above must not be changed. Below is my work.
#def __str__(self):
#     return self.vector ---Not sure how to use __str__ on a list---



    def __add__(self,other):
        vector = Vector(self.vector+other.vector)
        return vector

Я знаю, что это неправильный метод, но я понятия не имею, как работать со списком.Я просто хочу знать, как работать со списком в классе.Также должно сработать следующее утверждение:

x=Vector([2,4,6]) #This is a list right? This is where I get stuck.
y=Vector([7,8,9])
print(x+y==Vector([9.12.15]))

Я не хочу, чтобы ответ на все операции был достаточен, только add .Я просто не понимаю, как выводить списки в классах без оператора "a.vector", который явно не использовал команды, приведенные выше, при создании объектов для классов.

Также, пожалуйста, укажите, требуется ли какое-либо пояснение.Любая помощь приветствуется!Я новичок в программировании и только что выучил классы в Python.Большое спасибо заранее

1 Ответ

0 голосов
/ 07 июня 2018

Результатом добавления двух векторов длины 3 должен быть вектор с 3 элементами, где каждый элемент является суммой соответствующих элементов в исходных двух векторах.

def __add__(self,other):
    return Vector([a+b for a,b in zip(self.vector, other.vector)])

Используется zip для перебора обоих начальных векторов вместе и построения нового списка с использованием понимания списка .

>>> x = Vector([2,4,6])
>>> y = Vector([7,8,9])
>>> x+y==Vector([9,12,15])
True

Подробнее:

Если вы хотите поддерживать скалярное умножение, как указано в ваших комментариях, тогда ваш операнд other - это не другой вектор, а число.Таким образом, вам нужно умножить каждый элемент по отдельности на это число.

def __mul__(self, other):
    return Vector([a*other for a in self.vector])
__rmul__ = __mul__

Это должно позволить вам выполнять v*5 и 5*v, где v - это Vector объект.

>>> x = Vector([2,4,6])
>>> x*5==Vector([10,20,30])
True

Подробнее

Вот пример того, как вы можете написать точечное произведение между двумя векторами:

def dot(self, other):
    return sum(a*b for (a,b) in zip(self.vector, other.vector))

>>> x = Vector([1,2,3])
>>> y = Vector([3,2,1])
>>> x.dot(y)
10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...