@hell0_w0rId

Откуда появляются два дополнительных переноса строки?

Решил я попрактиковаться в ООП.
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
.
.


Можно ли тут что-то улучшить (в плане архитектуры, красоты кода)?
  • Вопрос задан
  • 122 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы