Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 61 additions & 0 deletions lesson_7/hw01_7.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# Реализовать класс 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 (двух матриц). Результатом сложения должна быть новая матрица.
# Подсказка: сложение элементов матриц выполнять поэлементно — первый элемент первой строки первой матрицы складываем
# с первым элементом первой строки второй матрицы и т.д.


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)
65 changes: 65 additions & 0 deletions lesson_7/hw02_7.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# Реализовать проект расчета суммарного расхода ткани на производство одежды. Основная сущность (класс) этого проекта
# — одежда, которая может иметь определенное название. К типам одежды в этом проекте относятся пальто и костюм.
# У этих типов одежды существуют параметры: размер (для пальто) и рост (для костюма).
# Это могут быть обычные числа: V и H, соответственно.
# Для определения расхода ткани по каждому типу одежды использовать формулы: для пальто (V/6.5 + 0.5),
# для костюма (2*H + 0.3). Проверить работу этих методов на реальных данных.
# Реализовать общий подсчет расхода ткани. Проверить на практике полученные на этом уроке знания:
# реализовать абстрактные классы для основных классов проекта, проверить на практике работу декоратора @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())
78 changes: 78 additions & 0 deletions lesson_7/hw03_7.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# Реализовать программу работы с клетками. Необходимо создать класс Клетка. В его конструкторе инициализировать
# параметр, соответствующий количеству клеток (целое число). В классе должны быть реализованы методы перегрузки
# арифметических операторов: сложение (__add__()), вычитание (__sub__()), умножение (__mul__()), деление (__truediv__())
# . Данные методы должны выполнять увеличение, уменьшение, умножение и обычное (не целочисленное) деление клеток,
# соответственно. В методе деления должно осуществляться округление значения до целого числа.
# В классе необходимо реализовать метод make_cell(), принимающий экземпляр класса и количество клеток в ряду.
# Метод должен возвращать строку виду *****\n*****\n*****..., где количество клеток между \n равно переданному
# аргументу, а количество рядов определяется, исходя из общего количества клеток.
# При создании экземпляра клетки должна происходить перезапись параметра, который хранит количество клеток.
# Подсказка: подробный список операторов для перегрузки доступен по ссылке.


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)