diff --git a/Lesson_7/task_1.py b/Lesson_7/task_1.py new file mode 100644 index 0000000..3c035ec --- /dev/null +++ b/Lesson_7/task_1.py @@ -0,0 +1,67 @@ +# Реализовать класс Matrix (матрица). Обеспечить перегрузку конструктора класса (метод __init__()), +# который должен принимать данные (список списков) для формирования матрицы. +# Подсказка: матрица — система некоторых математических величин, расположенных в виде прямоугольной схемы. +# Примеры матриц: 3 на 2, 3 на 3, 2 на 4. +# +# 31 32 3 5 32 3 5 8 3 +# 37 43 2 4 6 8 3 7 1 +# 51 86 -1 64 -8 +# Следующий шаг — реализовать перегрузку метода __str__() для вывода матрицы в привычном виде. +# Далее реализовать перегрузку метода __add__() для реализации операции сложения двух объектов класса +# Matrix (двух матриц). Результатом сложения должна быть новая матрица. Подсказка: сложение элементов матриц +# выполнять поэлементно — первый элемент первой строки первой матрицы складываем +# с первым элементом первой строки второй матрицы и т.д. + +class Matrix: + + def __init__(self, my_matrix_1, my_matrix_2): + self.my_matrix_1 = my_matrix_1 + self.my_matrix_2 = my_matrix_2 + # self.result = result + + def __add__(self): + + result = [[0] * M for i in range(N)] + + # my_matrix_1 = [] + # for i in range(N): + # row = input().split() + # for i in range(len(row)): + # row[i] = int(row[i]) + # my_matrix_1.append(row) + # + # my_matrix_2 = [] + # for i in range(M): + # row = input().split() + # for i in range(len(row)): + # row[i] = int(row[i]) + # my_matrix_2.append(row) + + for i in range(len(self.my_matrix_1)): + + for j in range(len(self.my_matrix_2[i])): + result[i][j] = self.my_matrix_1[i][j] + self.my_matrix_2[i][j] + + return '\n'.join('\t'.join(str(j) for j in i) for i in result) + + def __str__(self): + return '\n'.join('\t'.join(str(j) for j in i) for i in self.result) + + +N = int(input('N = ')) + +# first_matrix = Matrix.__add__.my_matrix_1 = [] +# print(first_matrix) + +M = int(input('M = ')) + +my_matrix = Matrix([[3, 5, 32], + [2, 4, 6], + [-1, 64, -8]], + [[-8, 64, -1], + [6, 4, 2], + [32, 5, 3]]) + +print(my_matrix.__add__()) + + diff --git a/Lesson_7/task_2.py b/Lesson_7/task_2.py new file mode 100644 index 0000000..c80409d --- /dev/null +++ b/Lesson_7/task_2.py @@ -0,0 +1,59 @@ +# Реализовать проект расчета суммарного расхода ткани на производство одежды. Основная +# сущность (класс) этого проекта — одежда, которая может иметь определенное название. К +# типам одежды в этом проекте относятся пальто и костюм. У этих типов одежды существуют +# параметры: размер (для пальто) и рост (для костюма). Это могут быть обычные числа: V и +# H, соответственно. +# Для определения расхода ткани по каждому типу одежды использовать формулы: для пальто +# (V/6.5 + 0.5), для костюма (2*H + 0.3). Проверить работу этих методов на реальных данных. +# Реализовать общий подсчет расхода ткани. Проверить на практике полученные на этом уроке +# знания: реализовать абстрактные классы для основных классов проекта, проверить на +# практике работу декоратора @property. + +class Cloth: + def __init__(self, size, height): + self.size = size + self.height = height + + def get_cloth_amount_coat(self): + return self.size / 6.5 + 0.5 + + def get_cloth_amount_suit(self): + return self.height * 2 + 0.3 + + @property + def get_cloth_amount_total(self): + return str(f'The total amount of cloth needed for sewing products: \n' + f'{round((self.size / 6.5 + 0.5) + (self.height * 2 + 0.3), 2)}') + + +class Coat(Cloth): + def __init__(self, size, height): + super().__init__(size, height) + self.cloth_amount_coat = round(self.size / 6.5 + 0.5, 2) + + def __str__(self): + return f'The amount of cloth for sewing a coat is:\n' \ + f' {self.cloth_amount_coat}' + + +class Suit(Cloth): + def __init__(self, size, height): + super().__init__(size, height) + self.cloth_amount_suit = round(self.height * 2 + 0.3, 2) + + def __str__(self): + return f'The amount of fabric for sewing a suit is:\n' \ + f'{self.cloth_amount_suit}' + + +# coat = Coat(4, 7) +coat = Coat(int(input('Please enter your size: ')), int(input('Please enter your height: '))) +print(coat) +# print(coat.get_cloth_amount_coat) +# print(coat.get_cloth_amount_total) + +# suit = Suit(4, 7) +suit = Suit(int(input('Please enter your size: ')), int(input('Please enter your height: '))) +print(suit) +# print(suit.get_cloth_amount_suit) +print(suit.get_cloth_amount_total) diff --git a/Lesson_7/task_3.py b/Lesson_7/task_3.py new file mode 100644 index 0000000..411334f --- /dev/null +++ b/Lesson_7/task_3.py @@ -0,0 +1,83 @@ +# Реализовать программу работы с органическими клетками, состоящими из ячеек. Необходимо создать класс Клетка. +# В его конструкторе инициализировать параметр, соответствующий количеству ячеек клетки (целое число). +# В классе должны быть реализованы методы перегрузки арифметических операторов: +# сложение (__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, amount): + self.amount = int(amount) + + def __str__(self): + return f'{self.amount * "*"}' + + def __add__(self, other): # '+' + return Cell(self.amount + other.amount) + + def __sub__(self, other): # '-' + if self.amount - other.amount > 0: + return Cell(self.amount - other.amount) + else: + print('Negative value!') + + def __mul__(self, other): # '*' + return Cell(self.amount * other.amount) + + def __truediv__(self, other): # 'round(//)' + return Cell(round(self.amount // other.amount)) + + def make_order(self, cells_in_row): + row = '' + for i in range(int(self.amount / cells_in_row)): + row += f'{"*" * cells_in_row} \\n' + row += f'{"*" * (self.amount % cells_in_row)}' + return row + + +print('The results of the option 1:') + +cells_1 = Cell(11) +cells_2 = Cell(9) +print('The number of * in cell 1: ', cells_1) +print('The number of * in cell 2: ', cells_2) +print('The result of adding: ', cells_1 + cells_2) +print('The result of subtraction: ', cells_1 - cells_2) +print('The result of multiplication: ', cells_1 * cells_2) +print('The result of division: ', cells_1 / cells_2) +print('Separation of cells:', cells_1.make_order(4)) +print('Separation of cells:', cells_2.make_order(3)) + +print('The results of the option 2:') + +cells_1 = Cell(9) +cells_2 = Cell(11) +print('The number of * in cell 1: ', cells_1) +print('The number of * in cell 2: ', cells_2) +print('The result of adding: ', cells_1 + cells_2) +print('The result of subtraction: ', cells_1 - cells_2) +print('The result of multiplication: ', cells_1 * cells_2) +print('The result of division: ', cells_1 / cells_2) +print('Separation of cells:', cells_1.make_order(4)) +print('Separation of cells:', cells_2.make_order(3)) +