From 9b8781736525664ddd1e0254f9e766cb7ecdc808 Mon Sep 17 00:00:00 2001 From: Nikod Podin <54398975+NikosPodin@users.noreply.github.com> Date: Sun, 29 Nov 2020 22:18:16 +0500 Subject: [PATCH] HomeTask 8 --- DZ8.py | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 DZ8.py diff --git a/DZ8.py b/DZ8.py new file mode 100644 index 0000000..a2351f2 --- /dev/null +++ b/DZ8.py @@ -0,0 +1,120 @@ +# 1. Реализовать класс Matrix (матрица). Обеспечить перегрузку конструктора класса (метод __init__()), +# который должен принимать данные (список списков) для формирования матрицы. +# Подсказка: матрица — система некоторых математических величин, расположенных в виде прямоугольной схемы. +# Примеры матриц вы найдете в методичке. +# Следующий шаг — реализовать перегрузку метода __str__() для вывода матрицы в привычном виде. +# Далее реализовать перегрузку метода __add__() для реализации операции сложения двух объектов +# класса Matrix (двух матриц). Результатом сложения должна быть новая матрица. +# Подсказка: сложение элементов матриц выполнять поэлементно — первый элемент первой строки первой +# матрицы складываем с первым элементом первой строки второй матрицы и т.д. +print('Задание 1, Урок 7') + +class Matrix: + def __init__(self,userNumb): + self.userNumb = userNumb + def __str__(self): + res = '' + for i in self.userNumb: + for p in i: + res += f'{p}\t' + res += '\n' + return res + #return '\n'.join(for i in self.userNumb) + def __add__(self, other): + res = [] + for i in range(len(self.userNumb)): + midRow = [] + for u in range(len(self.userNumb[i])): + midRow.append(self.userNumb[i][u] + other.userNumb[i][u]) + res.append(midRow) + return Matrix(res) + +mat_1 = Matrix([[1,2], [8,4], [17,22,4]]) +mat_2 = Matrix([[17,8], [9,8], [5,6,9]]) +mat_3 = Matrix([[8,3], [9,1], [14,2,6]]) +print(mat_1+mat_2) +print(mat_1+mat_2+mat_3) + +# 2. Реализовать проект расчета суммарного расхода ткани на производство одежды. Основная сущность +# (класс) этого проекта — одежда(clothes), которая может иметь определенное название. К типам одежды в этом +# проекте относятся пальто(coat) и костюм(suit). +# У этих типов одежды существуют параметры: размер (для пальто) и рост (для костюма). +# Это могут быть обычные числа: V и H, соответственно. +# Для определения расхода ткани по каждому типу одежды использовать формулы: для пальто (V/6.5 + 0.5), +# для костюма (2 * H + 0.3). Проверить работу этих методов на реальных данных. +# Реализовать общий подсчет расхода ткани. Проверить на практике полученные на этом уроке знания: +# реализовать абстрактные классы для основных классов проекта, проверить на практике работу декоратора @property. + +print('Задание 2, Урок 7') +from abc import ABC, abstractmethod +class clothes: + def __init__(self, date): + self.date = date + @abstractmethod + def formula(self): + pass + +class coat(clothes): + @property + def formula(self): + return round((self.date/6.5 + 0.5),1) + +class suit(clothes): + @property + def formula(self): + return round((2 * self.date + 0.3),1) + +print(f'{coat(40).formula} по пальто такая история') +print(f'{suit(50).formula} по плащу') + +# 3. Реализовать программу работы с органическими клетками. Необходимо создать класс Клетка. +# В его конструкторе инициализировать параметр, соответствующий количеству клеток (целое число). +# В классе должны быть реализованы методы перегрузки арифметических операторов: сложение (__add__()), +# вычитание (__sub__()), умножение (__mul__()), деление (__truediv__()).Данные методы должны +# применяться только к клеткам и выполнять увеличение, уменьшение, умножение и обычное (не целочисленное) +# деление клеток, соответственно. В методе деления должно осуществляться округление значения до целого числа. +# Сложение. Объединение двух клеток. При этом число ячеек общей клетки должно равняться сумме ячеек +# исходных двух клеток. +# Вычитание. Участвуют две клетки. Операцию необходимо выполнять только если разность количества +# ячеек двух клеток больше нуля, иначе выводить соответствующее сообщение. +# Умножение. Создается общая клетка из двух. Число ячеек общей клетки определяется как произведение +# количества ячеек этих двух клеток. +# Деление. Создается общая клетка из двух. Число ячеек общей клетки определяется как целочисленное +# деление количества ячеек этих двух клеток. +# В классе необходимо реализовать метод make_order(), принимающий экземпляр класса и количество ячеек +# в ряду. Данный метод позволяет организовать ячейки по рядам. +# Метод должен возвращать строку вида *****\n*****\n*****..., где количество ячеек между \n равно +# переданному аргументу. Если ячеек на формирование ряда не хватает, то в последний ряд записываются все оставшиеся. +# Например, количество ячеек клетки равняется 12, количество ячеек в ряду — 5. Тогда метод make_order() +# вернет строку: *****\n*****\n**. +# Или, количество ячеек клетки равняется 15, количество ячеек в ряду — 5. Тогда метод make_order() +# вернет строку: *****\n*****\n*****. +print('Задание 3, Урок 7') +class Cell: + def __init__(self,number): + self.number = number + def __str__(self): + return str(self.number * '*') + def __add__(self, other): #сложеие + return str(self.number + other.number) + def __sub__(self, other): #вычитание + if self.number - other.number > 0: + return self.number - other.number + else: + return 'Первое число меньше второго, получается отрицательно число ' + def __mul__(self, other): #умножение + return self.number * other.number + + def __truediv__(self, other): #деление + return round(self.number / other.number) + def make_order(self, row): + return '\n'.join([row*'*' for i in range(self.number//row)]) + '\n'+ '*'*(round(self.number%row)) + +c1= Cell(21) +c2= Cell(8) + +print('Если вычитать c1 - c2 будет: ',c1 - c2 ) +print('Если складывать c1 + c2 будет: ',c1 + c2) +print('Если умножать c1 * c2 будет: ',c1 * c2) +print('Если делить c1 / c2 будет: ',c1 / c2) +print('если раскадывать по рядам:\n', c1.make_order(5))