Откуда появляются два дополнительных переноса строки? Решил я попрактиковаться в ООП.class Matrix(object):
def __init__(self,x,y,content):
''' x - height,
y - width,
content - two-dimensional array
Example: matrix = Matrix(3,2,
[ [1,2],
[3,4],
[5,6] ])'''
if len(content) == x:self.height = x
else:raise ValueError("Different height")
for i in range(self.height):
if len(content[i]) != y:raise ValueError("Different width")
self.width = y
self.content = content
def __repr__(self):
out = ''
for i in range(self.height):
out += ' '.join(map(str,self.content[i]))
out += '\n'
return out

def mul_on_num(self, number):
''' return Matrix object'''
ctx =[[number * self.content[i][j] for j in range(self.width)] for i in range(self.height)]
return Matrix(self.height,self.width,ctx)
def __add__(self, matrix):
if matrix.width != self.width or matrix.height != self.height:
raise ValueError("Different sizes of the matrix")
ctx =[[matrix.content[i][j] + self.content[i][j] for j in range(self.width)] for i in range(self.height)]
return Matrix(self.height,self.width,ctx)
def __mul__(self,matrix):

if self.width == matrix.height:
n = self.width;mode = 0
elif matrix.width == self.height:
n = matrix.width;mode = 1
else:
raise ValueError("Different size")
if mode:
c = [[0 for i in range(self.width)] for j in range(matrix.height)]
for i in range(matrix.height):
for j in range(self.width):
for k in range(n):
c[i][j] += matrix.content[i][k]*self.content[k][j]
return Matrix(matrix.height, self.width, c)
else:
c = [ [0 for i in range(matrix.width)] for j in range(self.height)]
for i in range(self.height):
for j in range(matrix.width):
for k in range(n):
c[i][j] += self.content[i][k] * matrix.content[k][j]
return Matrix(self.height,matrix.width, c)
Возможно, что-то делаю не так, но почему при вызове такого скрипта:from main import Matrix
m = Matrix(2,2,[ [2,2],[2,2] ])
s = Matrix(2,2,[ [2,2],[2,2] ])
print('\n'*10)
k = s*m
print(k)
Получается так вывод:8 8
8 8
.
.
Вместо точки \n
В самом конце появляются два \n
Я еще пытался использовать __str__, но при вызове m = Matrix(2,2,[ [2,2],[2,2] ]) у меня печаталсь матрица 2 2
2 2
.
.
Можно ли тут что-то улучшить (в плане архитектуры, красоты кода)?

21 Авг 2019 в 06:59
170 +1
1
Ответы
1

Два дополнительных переноса строки могут появляться из-за того, что метод __repr__ также добавляет перенос строки \n после каждой строки матрицы. При вызове метода __str__ для объекта Matrix, который используется при выводе на экран, также может добавляться дополнительный перенос строки.

Чтобы улучшить архитектуру и красоту кода, можно рассмотреть следующие улучшения:

Переименовать метод __repr__ на __str__, чтобы он автоматически вызывался при вызове print.

В методе __str__ вместо объявления переменной out и цикла с конкатенацией строк, можно использовать генератор списков и метод join для удобной сборки вывода.

Добавить проверки на типы передаваемых данных в конструкторе __init__, например, чтобы удостовериться, что x и y являются целыми числами, а content является двумерным массивом.

Рассмотреть возможность использования библиотеки NumPy для работы с матрицами, так как она предоставляет удобные методы для умножения и сложения матриц.

Добавить дополнительные методы, например, для транспонирования матрицы или вычисления определителя.

Выводить сообщения об ошибках более информативно, указывая конкретные причины ошибок, например, какие именно размерности матриц отличаются.

Внесение этих улучшений может сделать код более удобным для использования и понимания.

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 093 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир