From b141e425644dff99ab54f08498c29918921cd264 Mon Sep 17 00:00:00 2001 From: karmusha Date: Sun, 30 Jul 2023 10:22:26 +0200 Subject: [PATCH 1/3] dz1_task1 finished --- new_sem11_oop/pack11/task1.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/new_sem11_oop/pack11/task1.py b/new_sem11_oop/pack11/task1.py index 143947d..38c4b86 100644 --- a/new_sem11_oop/pack11/task1.py +++ b/new_sem11_oop/pack11/task1.py @@ -18,7 +18,15 @@ def __str__(self): """Метод представления для пользователя с информацией об авторе, собственно строке и времени ее создания.""" return f'Name: {self.author_name}, string: {self.value}, time: {self.start_time}' + + def __repr__(self): + """Метод представления для разработчика для создания экземпляра из консоли в виде MyString(string, 'author_name').""" + + return f'MyString({self.value}, "{self.author_name}")' s1 = MyString(1, 'Alex') print(s1) +print(repr(s1)) + +print(f'Documentation:\n{MyString.__doc__}') From bf068acc6b2b298370c86d17f707f963260fdd41 Mon Sep 17 00:00:00 2001 From: karmusha Date: Sun, 30 Jul 2023 13:36:09 +0200 Subject: [PATCH 2/3] finished dz1_matrix --- new_sem11_oop/dz1.py | 9 --- new_sem11_oop/dz1_matrix.py | 124 ++++++++++++++++++++++++++++++++++++ 2 files changed, 124 insertions(+), 9 deletions(-) delete mode 100644 new_sem11_oop/dz1.py create mode 100644 new_sem11_oop/dz1_matrix.py diff --git a/new_sem11_oop/dz1.py b/new_sem11_oop/dz1.py deleted file mode 100644 index 4bd656e..0000000 --- a/new_sem11_oop/dz1.py +++ /dev/null @@ -1,9 +0,0 @@ -# Добавьте ко всем задачам с семинара строки документации и методы вывода информации на печать. - -# Создайте класс Матрица. Добавьте методы для: -# - вывода на печать, -# - сравнения, (если равны: одинаковый размер, количество элементов) -# - сложения, (если они равны) -# - *умножения матриц (если кол-во столбцов одной мартицы равно кол-ву строк другой матрицы) - - diff --git a/new_sem11_oop/dz1_matrix.py b/new_sem11_oop/dz1_matrix.py new file mode 100644 index 0000000..75a0f2e --- /dev/null +++ b/new_sem11_oop/dz1_matrix.py @@ -0,0 +1,124 @@ +# Добавьте ко всем задачам с семинара строки документации и методы вывода информации на печать. + +# Создайте класс Матрица. Добавьте методы для: +# - вывода на печать, +# - сравнения, (если равны: одинаковый размер, количество элементов) +# - сложения, (если они равны) +# - *умножения матриц (если кол-во столбцов одной мартицы равно кол-ву строк другой матрицы) + +class Matrix: + """Класс Матрица. Создаётся из списка списков.""" + + + def __init__(self, matrix): + self.matrix = matrix + + def __str__(self): + """Вывод матрицы на печать для пользователя.""" + + + return '[' + ']\n['.join('\t'.join(map(str, row)) for row in self.matrix) + ']' + + def __getitem__(self, index): + return self.matrix[index] + + def matrix_size(self): + rows = len(self.matrix) + columns = len(self.matrix[0]) + return rows, columns + + def get_high(self): + return len(self.matrix[0]) + + def get_weight(self): + return len(self.matrix) + + def check_matrix_equality(self, other): + """ + Проверяет мартицы одинаковость размерностей + :param self: Первая матрица + :param other: Вторая матрица + + :return: True or False + """ + + if self.get_high() == other.get_high() and self.get_weight() == other.get_weight(): + return True + + return False + + def __eq__(self, other): + """Сравнение мартиц одинавовой размерности на равенство""" + + if self.check_matrix_equality(other): + res = zip(self.matrix, other) + res = map(lambda x: x[0] == x[1], res) + return all(res) + + return False + + def __add__(self, other): + """Сложение мартиц одинавовой размерности""" + + if not self.check_matrix_equality(other): + return 'Нельзя сложить матрицы разных размерностей' + + result = [] + numbers = [] + for i in range(self.get_weight()): + for j in range(self.get_high()): + summa = other[i][j] + self.matrix[i][j] + numbers.append(summa) + if len(numbers) == len(self.matrix): + result.append(numbers) + numbers = [] + + return Matrix(result) + + def __mul__(self, other): + """Умножение мартиц (длина одной матрицы должна быть равна ширине другой матрицы)""" + + if self.get_high() != other.get_weight(): + return 'Нельзя перемножить такие матрицы' + + result = [] + for i in range(self.get_weight()): + res = [] + for j in range(other.get_weight()): + el, m = 0, 0 + for k in range(self.get_high()): + m = self[i][k] * other[k][j] + el += m + res.append(el) + result.append(res) + return Matrix(result) + + +if __name__ == '__main__': + m1 = Matrix([ + [1, 1, 1], + [2, 2, 2], + [3, 3, 3] + ]) + + m2 = Matrix([ + [10, 10, 10], + [20, 20, 20], + [30, 30, 30] + ]) + + m3 = Matrix([ + [1, 1, 1], + [2, 2, 2], + [3, 3, 3] + ]) + + print(m1) + print(m2) + print(m3) + + print(f'{m1 == m2 = }') + print(f'{m1 == m3 = }') + + print(f'Сложение:\n{m1 + m2}') + print(f'Умножение:\n{m1 * m2}') From 0c020eb134caf0f35f4de70f494b3ab29b5ac97e Mon Sep 17 00:00:00 2001 From: karmusha Date: Sun, 30 Jul 2023 13:50:22 +0200 Subject: [PATCH 3/3] updated dz2 with repr --- new_sem11_oop/dz1_matrix.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/new_sem11_oop/dz1_matrix.py b/new_sem11_oop/dz1_matrix.py index 75a0f2e..f278e6c 100644 --- a/new_sem11_oop/dz1_matrix.py +++ b/new_sem11_oop/dz1_matrix.py @@ -16,9 +16,12 @@ def __init__(self, matrix): def __str__(self): """Вывод матрицы на печать для пользователя.""" - return '[' + ']\n['.join('\t'.join(map(str, row)) for row in self.matrix) + ']' + + def __repr__(self) -> str: + return '\n' + self.__str__() + def __getitem__(self, index): return self.matrix[index] @@ -113,12 +116,12 @@ def __mul__(self, other): [3, 3, 3] ]) - print(m1) - print(m2) - print(m3) + print(f'{m1 = }') + print(f'{m2 = }') + print(f'{m3 = }') print(f'{m1 == m2 = }') print(f'{m1 == m3 = }') - print(f'Сложение:\n{m1 + m2}') - print(f'Умножение:\n{m1 * m2}') + print(f'{m1 + m2 = }') + print(f'{m1 * m2 = }')