diff --git a/task_1_lesson7.py b/task_1_lesson7.py new file mode 100644 index 0000000..847ec71 --- /dev/null +++ b/task_1_lesson7.py @@ -0,0 +1,41 @@ +# Задание №1 +# Реализовать класс Matrix (матрица). Обеспечить перегрузку конструктора класса (метод +# __init__()), который должен принимать данные (список списков) для формирования матрицы. +# Подсказка: матрица — система некоторых математических величин, расположенных в виде +# прямоугольной схемы. +# Примеры матриц: 3 на 2, 3 на 3, 2 на 4. +# Следующий шаг — реализовать перегрузку метода __str__() для вывода матрицы в +# привычном виде. +# Далее реализовать перегрузку метода __add__() для реализации операции сложения двух +# объектов класса Matrix (двух матриц). Результатом сложения должна быть новая матрица. +# Подсказка: сложение элементов матриц выполнять поэлементно — первый элемент первой +# строки первой матрицы складываем с первым элементом первой строки второй матрицы и т.д. + +class Matrix: + def __init__(self, ls_matrix): + self.ls_matrix = ls_matrix + + def __str__(self): + for line in self.ls_matrix: + for el in line: + print(f"{el:3}", end=" ") + print() + print() + + def __add__(self, other): + for i in range(len(self.ls_matrix)): + for i_1 in range(len(self.ls_matrix[i])): + self.ls_matrix[i][i_1] = self.ls_matrix[i][i_1] + other.ls_matrix[i][i_1] + return Matrix(self.ls_matrix) + + +ls_matrix_1 = [[-1, 0, 1], [0, 1, 2], [1, 2, 3]] +ls_matrix_2 = [[3, 2, 1], [2, 1, 0], [1, 0, -1]] + +m1 = Matrix(ls_matrix_1) +m1.__str__() +m2 = Matrix(ls_matrix_2) +m2.__str__() +new_m = m1.__add__(m2) +print(type(new_m)) +new_m.__str__() diff --git a/task_2_lesson7.py b/task_2_lesson7.py new file mode 100644 index 0000000..2357680 --- /dev/null +++ b/task_2_lesson7.py @@ -0,0 +1,54 @@ +# Задание №2 +# Реализовать проект расчета суммарного расхода ткани на производство одежды. Основная +# сущность (класс) этого проекта — одежда, которая может иметь определенное название. К +# типам одежды в этом проекте относятся пальто и костюм. У этих типов одежды существуют +# параметры: размер (для пальто) и рост (для костюма). Это могут быть обычные числа: V и +# H, соответственно. +# Для определения расхода ткани по каждому типу одежды использовать формулы: для пальто +# (V/6.5 + 0.5), для костюма (2*H + 0.3). Проверить работу этих методов на реальных данных. +# Реализовать общий подсчет расхода ткани. Проверить на практике полученные на этом уроке +# знания: реализовать абстрактные классы для основных классов проекта, проверить на +# практике работу декоратора @property. + +from abc import ABC, abstractmethod + + +class Clothes(ABC): + + def __init__(self, size, height): + self.size = size + self.height = height + + @property + def fabric_quantity(self): + return (self.size/6.5+0.5)+(2*self.height+0.3) + @abstractmethod + def abstract(self): + return 'Абстрактный метод' + + +class Coat(Clothes): + + def fabric_quantity(self): + return self.size/6.5+0.5 + + def abstract(self): + return 'Абстрактный метод (костюм)' + + +class Costume(Clothes): + + def fabric_quantity(self): + return 2*self.height+0.3 + + def abstract(self): + return 'Абстрактный метод (пальто)' + + +coat = Coat(52, 176) +costume = Costume(52, 176) +print(f'На пошив пальто необходимо {coat.fabric_quantity()} ткани') +print(f'На пошив костюма необходимо {costume.fabric_quantity()} ткани') +print(f'Общее количество ткани для одежды: {coat.fabric_quantity()+costume.fabric_quantity()}') +print(coat.abstract()) +print(costume.abstract()) diff --git a/task_3_lesson7.py b/task_3_lesson7.py new file mode 100644 index 0000000..c686873 --- /dev/null +++ b/task_3_lesson7.py @@ -0,0 +1,64 @@ +# Задание №3 +# Реализовать программу работы с органическими клетками, состоящими из ячеек. Необходимо +# создать класс Клетка. В его конструкторе инициализировать параметр, соответствующий +# количеству ячеек клетки (целое число). В классе должны быть реализованы методы +# перегрузки арифметических операторов: сложение (__add__()), вычитание (__sub__()), +# умножение (__mul__()), деление (__truediv__()). Данные методы должны применяться только +# к клеткам и выполнять увеличение, уменьшение, умножение и целочисленное (с округлением +# до целого) деление клеток, соответственно. +# Сложение. Объединение двух клеток. При этом число ячеек общей клетки должно равняться +# сумме ячеек исходных двух клеток. +# Вычитание. Участвуют две клетки. Операцию необходимо выполнять только если разность +# количества ячеек двух клеток больше нуля, иначе выводить соответствующее сообщение. +# Умножение. Создается общая клетка из двух. Число ячеек общей клетки определяется как +# произведение количества ячеек этих двух клеток. +# Деление. Создается общая клетка из двух. Число ячеек общей клетки определяется как +# целочисленное деление количества ячеек этих двух клеток. +# В классе необходимо реализовать метод make_order(), принимающий экземпляр класса и +# количество ячеек в ряду. Данный метод позволяет организовать ячейки по рядам. +# Метод должен возвращать строку вида *****\n*****\n*****..., где количество ячеек между \n +# равно переданному аргументу. Если ячеек на формирование ряда не хватает, то в последний +# ряд записываются все оставшиеся. +# Например, количество ячеек клетки равняется 12, количество ячеек в ряду — 5. Тогда метод +# make_order() вернет строку: *****\n*****\n**. +# Или, количество ячеек клетки равняется 15, количество ячеек в ряду — 5. Тогда метод +# make_order() вернет строку: *****\n*****\n*****. +# Подсказка: подробный список операторов для перегрузки доступен по ссылке. + +class Cell: + def __init__(self, number_cells): + self.number_cells = int(number_cells) + + def __add__(self, other): + return self.number_cells + other.number_cells + + def __sub__(self, other): + result = self.number_cells - other.number_cells + if result > 0: + return result + else: + return 'Нельзя произвести эту операцию, клетка слишком мала.' + + def __mul__(self, other): + return self.number_cells * other.number_cells + + def __truediv__(self, other): + return self.number_cells // other.number_cells + + def make_order(self, number_row): + result = '' + for i in range(self.number_cells//number_row): + result += '*' * number_row + '\n' + result += '*' * (self.number_cells % number_row) + '\n' + return result + + +cell1 = Cell(15) +cell2 = Cell(2) +cell3 = Cell(20) +print(cell1+cell2) +print(cell1-cell2) +print(cell1-cell3) +print(cell1*cell2) +print(cell1/cell2) +print(cell1.make_order(6))