Решение задачи Ошибки, транспонирование с Яндекс Контест

Без пояснения   Просмотров: 1877


Добавьте в программу из задачи B класс MatrixError, содержащий внутри self поля matrix1 и matrix2 (ссылки на матрицы).

В класс Matrix внесите следующие изменения:

Добавьте в метод __add__ проверку на ошибки в размере входных данных чтобы при попытке сложить матрицы разных размеров было выброшено исключение MatrixError таким образом, чтобы matrix1 поле MatrixError стало первым аргументом __add__ (просто self), а matrix2 — вторым (второй операнд для сложения).
Реализуйте метод transpose, транспонирующий матрицу и возвращающую результат (данный метод модифицирует экземпляр класса Matrix)
Реализуйте статический метод transposed, принимающий Matrix и возвращающий транспонированную матрицу. Пример статического метода:

Код

from sys import stdin
from copy import deepcopy


class MatrixError(BaseException):
    def __init__(self, first, second):
        self.matrix1 = first
        self.matrix2 = second


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

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

    def __add__(self, other):
        bl = len(self.matrix) == len(other.matrix)
        if bl and len(self.matrix[0]) == len(other.matrix[0]):
            l = []
            for i in range(len(self.matrix)):
                t = []
                if len(self.matrix[i]) != len(other.matrix[i]):
                    raise MatrixError(self, other)
                for j in range(len(self.matrix[0])):
                    t.append(self.matrix[i][j] + other.matrix[i][j])
                l.append(t)
            return '\n'.join('\t'.join(map(str, row)) for row in l)
        else:
            raise MatrixError(self, other)

    def __mul__(self, num):
        l = []
        for i in range(len(self.matrix)):
            t = []
            for j in range(len(self.matrix[0])):
                t.append(self.matrix[i][j] * num)
            l.append(t)
        return '\n'.join('\t'.join(map(str, row)) for row in l)

    def __rmul__(self, num):
        l = []
        for i in range(len(self.matrix)):
            t = []
            for j in range(len(self.matrix[0])):
                t.append(self.matrix[i][j] * num)
            l.append(t)
        return '\n'.join('\t'.join(map(str, row)) for row in l)

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

    def transpose(self):
        transMatrix = list(zip(*self.matrix))
        self.matrix = transMatrix
        return Matrix(transMatrix)

    def transposed(self):
        transMatrix = list(zip(*self.matrix))
        return Matrix(transMatrix)
exec(stdin.read())

         

Администратор Photo Автор: Администратор



Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться



Заявка на расчет