Реализация класса 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.