@get_up_Bill

Как грамотно реализовать класс Matrix в Python?

Прохожу курс "Введение в Python" на Coursera, остались задания из последней недели, где изучается ООП, непонятное и ужасное для новичка. Ниже привожу задание и собранный мной (из г* и палок) код, который не проходит даже первый тест в анализаторе. Очень прошу показать пример работающего кода или исправить мой, может тогда станет понятно, как работать с матрицами
Картинки с описанием задания и примерами тестов курса ниже:
5b78076c49573690498258.png5b7807737178f157972599.png
from sys import stdin
from copy import deepcopy


class Matrix:
    def __init__(self, list_of_lists):
        self.matrix = deepcopy(list_of_lists)

    def __str__(self):
        return '\n'.join('\t'.join(map(str, row))
                         for row in self.matrix)

    def size(self):
        sizepair = (len(self.matrix), len(self.matrix[0]))
        return sizepair

    def __getitem__(self, idx):
        return self.matrix[idx]

    def __add__(self, other):
        other = Matrix(other)
        result = []
        numbers = []
        for i in range(len(self.matrix)):
            for j in range(len(self.matrix[0])):
                summa = other[i][j] + self.matrix[i][j]
                numbers.append(summa)
                if len(numbers) == len(self.matrix):
                    result.append(numbers)
                    numbers = []
        return Matrix(result)

    def __mul__(self, other):
        if isinstance(other, int) or isinstance(other, float):
            result = [[other * x for x in y] for y in self.list2D]
            return Matrix(result)
        elif self.dim_C != other.dim_R:
            return 'Нельзя перемножить матрицы таких размерностей'
        else:
            a = range(self.dim_C)
            b = range(self.dim_R)
            c = range(other.dim_C)
            result = []
            for i in b:
                res = []
                for j in c:
                    el, m = 0, 0
                    for k in a:
                        m = self.list2D[i][k] * other.list2D[k][j]
                        el += m
                    res.append(el)
                result.append(res)
            return Matrix(result)

    def __rmul__(self, other):
        return self.__mul__(other)
  • Вопрос задан
  • 8171 просмотр
Пригласить эксперта
Ответы на вопрос 1
@get_up_Bill Автор вопроса
Может кому-нибудь потом поможет при прохождении курса.

Проблема оказалось банальной: забыла в конце кода exec(stdin.read())
В остальном всё верно 100/100
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы