


Помогите с задачей по ООП Python
Реализуйте класс Matrix. Он должен содержать:
Конструктор от списка списков. Гарантируется, что списки состоят из чисел, не пусты и все имеют одинаковый размер. Конструктор должен копировать содержимое списка списков, т. е. при изменении списков, от которых была сконструирована матрица, содержимое матрицы изменяться не должно.
Метод __str__ переводящий матрицу в строку. При этом элементы внутри одной строки должны быть разделены знаками табуляции, а строки — переносами строк. При этом после каждой строки не должно быть символа табуляции и в конце не должно быть переноса строки.
Метод size без аргументов, возвращающий кортеж вида (число строк, число столбцов)
На проверку вы должны сдать только файл, содержащий описание класса и одну строку вне класса (в качестве основной программы):
1
exec(stdin.read())
И в начале файла:
1
from sys import stdin
Для тестирования класса вы можете вместо строки exec(stdin.read()) вставлять код из примеров или писать свой код.
Формат ввода
Вводится исходный код тестирующей программы на языке Python.
Формат вывода
Выведите результат её работы в текущем окружении при помощи exec как это указано в условии.
Примеры
Тест 1
Входные данные:
# Task 1 check 1
m = Matrix([[1, 0], [0, 1]])
print(m)
m = Matrix([[2, 0, 0], [0, 1, 10000]])
print(m)
m = Matrix([[-10, 20, 50, 2443], [-5235, 12, 4324, 4234]])
print(m)
Вывод программы:
10
01
200
0110000
-1020502443
-52351243244234
Тест 2
Входные данные:
# Task 1 check 2
m1 = Matrix([[1, 0, 0], [1, 1, 1], [0, 0, 0]])
m2 = Matrix([[1, 0, 0], [1, 1, 1], [0, 0, 0]])
print(str(m1) == str(m2))
Вывод программы:
True
Тест 3
Входные данные:
# Task 1 check 3
m = Matrix([[1, 1, 1], [0, 100, 10]])
print(str(m) == '1\t1\t1\n0\t100\t10')
Вывод программы:
True
Суть в том, что не могу понять, как выводить итерируемое с использованием классов.
class Matrix:
Например, хочу выводить значения списка в строке, а убрать кавычки привычным способом не получается.
Пишу так - кавычки.
def __init__(self, il = []):
self.il = il
def __str__(self):
return str(self.il)
a = Matrix([[1, 0], [0, 1]])
print(a)
А вот так - застревает только на первом значении (единице):
class Matrix:
def __init__(self, il = []):
self.il = il
def __str__(self):
for i in self.il:
for j in i:
return str(j)
a = Matrix([[1, 0], [0, 1]])
print(a)
Гуглить "python методы строк" не пробовали?
Удалить кавычки можно методом replace:
строка. replace('\'', '')
Объединить список в строку (без кавычек) можно методом join:
строка-разделитель. join(список)
То есть для вашего задания можно соорудить такую штуку:
'\n'.join(['\t'.join([str(элемент_списка) for элемент_списка in список]) for список in матрица])
Если очень хочется итерироваться, можно собирать строку из списка поэлементно:
строка = ''
for элемент_списка in список:
строка += str(элемент_списка)
Тебе тут могут помочь: www.author247.blogspot.com