From a425b3a8a2f298afc395b7bfcbdc497f08d25bf8 Mon Sep 17 00:00:00 2001 From: "VIZEX\\ashumov" Date: Tue, 29 Oct 2019 10:04:02 +0300 Subject: [PATCH 1/4] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D1=8B?= =?UTF-8?q?=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20=D0=B4=D0=BB=D1=8F=20=D0=B2?= =?UTF-8?q?=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson_7/hw01_7.py | 23 +++++++++++++++++++++++ lesson_7/hw02_7.py | 10 ++++++++++ lesson_7/hw03_7.py | 12 ++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 lesson_7/hw01_7.py create mode 100644 lesson_7/hw02_7.py create mode 100644 lesson_7/hw03_7.py diff --git a/lesson_7/hw01_7.py b/lesson_7/hw01_7.py new file mode 100644 index 0000000..36a6a80 --- /dev/null +++ b/lesson_7/hw01_7.py @@ -0,0 +1,23 @@ +# Реализовать класс Matrix (матрица). Обеспечить перегрузку конструктора класса (метод __init__()), который +# должен принимать данные (список списков) для формирования матрицы. +# Подсказка: матрица — система некоторых математических величин, расположенных в виде прямоугольной схемы. +# Примеры матриц: 3 на 2, 3 на 3, 2 на 4. +# +# 31 22 +# 37 43 +# 51 86 +# +# 3 5 32 +# 2 4 6 +# -1 64 -8 +# +# 3 5 8 3 +# 8 3 7 1 +# +# Следующий шаг — реализовать перегрузку метода __str__() для вывода матрицы в привычном виде. +# Далее реализовать перегрузку метода __add__() для реализации операции сложения двух объектов класса +# Matrix (двух матриц). Результатом сложения должна быть новая матрица. +# Подсказка: сложение элементов матриц выполнять поэлементно — первый элемент первой строки первой матрицы складываем +# с первым элементом первой строки второй матрицы и т.д. + + diff --git a/lesson_7/hw02_7.py b/lesson_7/hw02_7.py new file mode 100644 index 0000000..f414efb --- /dev/null +++ b/lesson_7/hw02_7.py @@ -0,0 +1,10 @@ +# Реализовать проект расчета суммарного расхода ткани на производство одежды. Основная сущность (класс) этого проекта +# — одежда, которая может иметь определенное название. К типам одежды в этом проекте относятся пальто и костюм. +# У этих типов одежды существуют параметры: размер (для пальто) и рост (для костюма). +# Это могут быть обычные числа: V и H, соответственно. +# Для определения расхода ткани по каждому типу одежды использовать формулы: для пальто (V/6.5 + 0.5), +# для костюма (2*H + 0.3). Проверить работу этих методов на реальных данных. +# Реализовать общий подсчет расхода ткани. Проверить на практике полученные на этом уроке знания: +# реализовать абстрактные классы для основных классов проекта, проверить на практике работу декоратора @property. + + diff --git a/lesson_7/hw03_7.py b/lesson_7/hw03_7.py new file mode 100644 index 0000000..61e166f --- /dev/null +++ b/lesson_7/hw03_7.py @@ -0,0 +1,12 @@ +# Реализовать программу работы с клетками. Необходимо создать класс Клетка. В его конструкторе инициализировать +# параметр, соответствующий количеству клеток (целое число). В классе должны быть реализованы методы перегрузки +# арифметических операторов: сложение (__add__()), вычитание (__sub__()), умножение (__mul__()), деление (__truediv__()) +# . Данные методы должны выполнять увеличение, уменьшение, умножение и обычное (не целочисленное) деление клеток, +# соответственно. В методе деления должно осуществляться округление значения до целого числа. +# В классе необходимо реализовать метод make_cell(), принимающий экземпляр класса и количество клеток в ряду. +# Метод должен возвращать строку виду *****\n*****\n*****..., где количество клеток между \n равно переданному +# аргументу, а количество рядов определяется, исходя из общего количества клеток. +# При создании экземпляра клетки должна происходить перезапись параметра, который хранит количество клеток. +# Подсказка: подробный список операторов для перегрузки доступен по ссылке. + + From c829a1f9655d44505ca1221795bb68b5f263ec7c Mon Sep 17 00:00:00 2001 From: "VIZEX\\ashumov" Date: Tue, 29 Oct 2019 11:20:26 +0300 Subject: [PATCH 2/4] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B2=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=20=D1=81=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B0=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson_7/hw01_7.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/lesson_7/hw01_7.py b/lesson_7/hw01_7.py index 36a6a80..1bc4f86 100644 --- a/lesson_7/hw01_7.py +++ b/lesson_7/hw01_7.py @@ -21,3 +21,41 @@ # с первым элементом первой строки второй матрицы и т.д. +class Matrix: + __data: list + + def __init__(self, data: list): + self.__data = data.copy() + print(f'Создали матрицу с параметром: {self.__data}') + + def __str__(self): + result = '' + for row in self.__data: + for cell in row: + result = f'{result}{cell}\t' + result = result.strip('\t') + result = f'{result}\n' + result = result.strip('\n') + return result + + def __add__(self, other): + if not isinstance(other, Matrix): + raise ValueError('Слагаемое не является матрицей') + + new_data = [] + if len(self.__data) != len(other.__data): + raise ValueError('Матрицы разных размеров, сложение невозможно') + for row_self, row_other in zip(self.__data, other.__data): + if len(row_self) != len(row_other): + raise ValueError('Матрицы разных размеров, сложение невозможно') + local_list = [] + for cell_self, cell_other in zip(row_self, row_other): + local_list.append(cell_self + cell_other) + new_data.append(local_list) + return Matrix(new_data) + + +matrix = Matrix([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]) +print(matrix) +matrix2 = Matrix([[1, 1, 1, 1, 1], [1, 1, 1, 1, 1]]) +print(matrix + matrix2) From 8473edd6a4b572dc084f2973ceeb8eb7ca913646 Mon Sep 17 00:00:00 2001 From: "VIZEX\\ashumov" Date: Tue, 29 Oct 2019 11:52:53 +0300 Subject: [PATCH 3/4] =?UTF-8?q?=D0=92=D1=82=D0=BE=D1=80=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=20=D1=81=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B0=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson_7/hw02_7.py | 55 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/lesson_7/hw02_7.py b/lesson_7/hw02_7.py index f414efb..ff2a49d 100644 --- a/lesson_7/hw02_7.py +++ b/lesson_7/hw02_7.py @@ -7,4 +7,59 @@ # Реализовать общий подсчет расхода ткани. Проверить на практике полученные на этом уроке знания: # реализовать абстрактные классы для основных классов проекта, проверить на практике работу декоратора @property. +from abc import ABC + +class Clothes(ABC): + + def get_material_size(self): + pass + + +class Suit(Clothes): + __height: float + + @property + def height(self): + return self.__height + + @height.setter + def height(self, value): + if 2.1 > value > 1.4: + self.__height = value + else: + raise ValueError('Некорректный диапазон роста') + + def __init__(self, height): + self.height = height + + def get_material_size(self): + return 2*self.height + 0.3 + + +class Coat(Clothes): + __size: int + + @property + def size(self): + return self.__size + + @size.setter + def size(self, value): + if 60 > value > 35: + self.__size = value + else: + raise ValueError('Значение размера некорректно') + + def __init__(self, size): + self.size = size + + def get_material_size(self): + return self.size/6.5 + 0.5 + + +suit = Suit(1.8) +print(suit.get_material_size()) + +coat = Coat(52) +print(coat.get_material_size()) \ No newline at end of file From 0122cabed4905e050f775c5859cc6f6c87ef334d Mon Sep 17 00:00:00 2001 From: "VIZEX\\ashumov" Date: Tue, 29 Oct 2019 13:39:48 +0300 Subject: [PATCH 4/4] =?UTF-8?q?=D0=A2=D1=80=D0=B5=D1=82=D1=8C=D1=8F=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=20=D1=81=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B0=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson_7/hw03_7.py | 66 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/lesson_7/hw03_7.py b/lesson_7/hw03_7.py index 61e166f..f3ec6aa 100644 --- a/lesson_7/hw03_7.py +++ b/lesson_7/hw03_7.py @@ -10,3 +10,69 @@ # Подсказка: подробный список операторов для перегрузки доступен по ссылке. +class Cell: + __how_many: int + + @property + def how_many(self): + return self.__how_many + + @how_many.setter + def how_many(self, value): + if value > 0: + self.__how_many = value + else: + raise ValueError('Количество клеток не может быть больше нуня!') + + def __init__(self, how_many): + self.__how_many = how_many + + def make_cell(self, number: int): + result = '' + if self.how_many < number: + result = '*' * self.how_many + else: + reserve = self.how_many + while reserve > 0: + result = f'{result}{"*" * min(number, reserve)}\n' + reserve = reserve - number + result = result.strip('\n') + return result + + def __str__(self): + return f'Набор ячеек, количество: {self.how_many}' + + def __add__(self, other): + if not isinstance(other, Cell): + raise ValueError('Второе слагаемое не является ячейками!') + + return Cell(self.how_many + other.how_many) + + def __sub__(self, other): + if not isinstance(other, Cell): + raise ValueError('Второе слагаемое не является ячейками!') + elif self.how_many - other.how_many < 0: + raise ValueError('Ячеек во втором объекте больше, чем в первом. Недопустимая операция') + return Cell(self.how_many - other.how_many) + + def __mul__(self, other): + if isinstance(other, Cell): + return Cell(self.how_many * other.how_many) + elif isinstance(other, int): + return Cell(self.how_many * other) + else: + raise ValueError('Недопустимый формат множителя') + + def __truediv__(self, other): + if isinstance(other, Cell): + return Cell(self.how_many // other.how_many) + elif isinstance(other, int): + return Cell(self.how_many // other) + else: + raise ValueError('Недопустимый формат делителя') + + +cells = Cell(15) +cells1 = Cell(6) +print(cells.make_cell(6)) +print(cells / cells1)