Реализация класса matrix для умножения матриц, заданных в виде списков. Python3

На вход подаются 2 произвольных списка (в тренировочном примере a=[[1, 2],[3, 4]] и b=[[5,6],[7,8]]). Класс matrix в своем конструкторе инициализирует матрицу (список из списков из float). Внутри класса есть функция mm, которая принимает на вход объект этого же класса и находит матричное произведение текущей матрицы (та, что в конструкторе) на переданную в функцию. Результат возвращать в виде списка из списков float. Кроме этого внутри matrix надо реализовать функцию для отображения матрицы на экран строка за строкой. Т.е. [[1.,2.,3.], [4.,5.,6.]] будет отображено так:

[1.0,2.0,3.0]

[4.0,5.0,6.0]

В случае, если матрицы не согласованы (число столбцов в первой не равно числу строк во второй), возвращать при произведении "матрицы не согласованы". Вот, что есть:

class matrix():
    def __init__(self, m):
        self.m=m

    def mm(self, another_m):
        #self.another_m=another_m
        mat3 = [[0,0,0],[0,0,0],[0,0,0]]
        
        if len(self.m)!=len(another_m.m[0]):
            return 'матрицы не согласованы'
        else:
            for i in range(len(self.m)):
                for k in range(len(another_m.m)):
                    mat3[i][k] = self.m[i][k]  * another_m.m[i][k]
            return mat3[i][k]
                
    # print(class_obj) отошлет нас сюда
    def __str__(self):
        return '\n'.join([''.join(['%d\t'% i for i in row]) for row in self.m])
# преобразуем их в объект класса matrix
a = matrix(a)
b = matrix(b)
# результат произведения преобразуем в объект класса
result = a.mm(b)
# проверка на согласованность
if result == 'матрицы не согласованы':
    print('матрицы не согласованы')
else:
    mm = matrix(result)
    # распечатываем объект класса матрицы на экран
    print(mm)

Ошибку выдаёт метод класса для отображения матрицы (__str__). Пробовала несколько вариантов, но не совсем понимаю как оно работает. Просьба в первую очередь помочь с этим. В таком виде он говорит, что float object is not iterable.


Ответы (0 шт):