Функция добавления не работает - я хочу иметь возможность суммировать две матрицы - PullRequest
1 голос
/ 14 июля 2020

Я хочу суммировать две матрицы, поэтому я использую метод __add__, но он, похоже, не работает. Кто-нибудь может мне помочь? Я не знаю, что делаю не так. Это мой код:

class Matrix():

    def __init__(self, width = int, height = int, fill_value=0):
        self.height = height #columna
        self. width = width #fila
        self.rows = [[fill_value] * width for _ in range (height)] #A for matrix A

    def __str__(self):
        return "\n" .join(" ".join(map(str, self.rows))for self.rows in self.rows)

    def set(self, row_index = int, column_index = int, value = int):
        self.rows[row_index][column_index] = value

    def get(self, row_index, column_index):
        return self.rows[row_index][column_index]

    def __add__(self, other):
        matrix_addition = []
        for i in range(self.height):
            new_row = []
            for j in range(self.width):
                addition = self.rows[i][j] + other.rows[i][j]
                new_row.append(addition)
            matrix_addition.append(new_row)

        return Matrix(matrix_addition)

У меня сообщение об ошибке:

  addition = self.rows[i][j] + other.rows[i][j],
    TypeError : ‘int’ object has no attribute ‘__getitem__’

1 Ответ

0 голосов
/ 14 июля 2020

Ваш код довольно хорош, вы почти его получили.

Первая проблема - это ваш конструктор и метод set(): используя значение по умолчанию value=int в параметрах, вы, по сути, назначаете type(int), чего вы не хотите. Вы должны либо назначить значение по умолчанию, например 2, либо использовать подсказку типа, чтобы указать тип данных, например, int. Вот пример с подсказкой типов и значениями по умолчанию:

   def __init__(self, width: int = 2, height: int = 2, fill_value=0):
      pass

   def set(self, row_index: int, column_index: int, value: int):
      pass

Вот фатальная ошибка в вашем методе __add__: return Matrix(matrix_addition). Это создает новый объект Matrix и передает matrix_addition в качестве аргумента. Однако первый аргумент в Matrix.__init__ - width, который ожидает int, а не List[List[int]]. Вместо этого наберите return matrix_addition, и он будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...