mirror of
https://github.com/denis-on/basicsPython.git
synced 2026-02-03 08:00:51 +03:00
dz les 7
This commit is contained in:
parent
47635b551a
commit
4d091e3c06
51
less-07/task-01.py
Normal file
51
less-07/task-01.py
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
# Реализовать класс Matrix (матрица). Обеспечить перегрузку конструктора класса (метод __init__()),
|
||||||
|
# который должен принимать данные (список списков) для формирования матрицы.
|
||||||
|
# Следующий шаг — реализовать перегрузку метода __str__() для вывода матрицы в привычном виде.
|
||||||
|
# Далее реализовать перегрузку метода __add__() для реализации операции сложения двух объектов
|
||||||
|
# класса Matrix (двух матриц). Результатом сложения должна быть новая матрица.
|
||||||
|
|
||||||
|
class Matrix():
|
||||||
|
"""Клас для работы с матрицами в ячейках которых целые числа"""
|
||||||
|
def __init__(self,data):
|
||||||
|
self.m = data
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return '\n'.join([''.join(['%d\t' % i for i in row]) for row in self.m])
|
||||||
|
|
||||||
|
def __add__(self, other):
|
||||||
|
if self.size != other.size:
|
||||||
|
raise ValueError('Для сложения необходимы равные по размеру матрицы')
|
||||||
|
#return Matrix([[0]]) # без raise
|
||||||
|
return Matrix(list(map(
|
||||||
|
lambda x, y: list(map(lambda z, w: z + w, x, y)),
|
||||||
|
self.m, other.m)))
|
||||||
|
|
||||||
|
@property
|
||||||
|
def size(self):
|
||||||
|
return (len(self.m), len(self.m[0]))
|
||||||
|
|
||||||
|
|
||||||
|
my_list_1=[[1,0,0],[0,1,0],[0,0,1]] # еденичная матрица
|
||||||
|
my_list_2 = [[2,2,2],[1,1,1]]
|
||||||
|
m_1 = Matrix(my_list_1)
|
||||||
|
m_2 = Matrix(my_list_1)
|
||||||
|
sum_m = m_1 + m_2
|
||||||
|
sum_m_2 = Matrix(my_list_2)+Matrix(my_list_2) # сложение матриц не квадратных
|
||||||
|
|
||||||
|
print(m_1)
|
||||||
|
print(m_1.size)
|
||||||
|
|
||||||
|
print(sum_m)
|
||||||
|
print(sum_m.size)
|
||||||
|
|
||||||
|
print(sum_m_2)
|
||||||
|
print(sum_m_2.size)
|
||||||
|
|
||||||
|
try:
|
||||||
|
sum_m_3 = Matrix(my_list_1) + Matrix(my_list_2) # сложение матриц разного размера
|
||||||
|
|
||||||
|
except ValueError as exp:
|
||||||
|
print(exp)
|
||||||
|
else:
|
||||||
|
print(sum_m_3)
|
||||||
|
print(sum_m_3.size)
|
||||||
57
less-07/task-02.py
Normal file
57
less-07/task-02.py
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
# Реализовать проект расчёта суммарного расхода ткани на производство одежды. Основная сущность (класс) этого
|
||||||
|
# проекта — одежда, которая может иметь определённое название. К типам одежды в этом проекте относятся пальто
|
||||||
|
# и костюм. У этих типов одежды существуют параметры: размер (для пальто) и рост (для костюма). Это могут быть
|
||||||
|
# обычные числа: V и H, соответственно.
|
||||||
|
# Для определения расхода ткани по каждому типу одежды использовать формулы: для пальто (V/6.5 + 0.5), для
|
||||||
|
# костюма (2*H + 0.3). Проверить работу этих методов на реальных данных.
|
||||||
|
# Реализовать общий подсчет расхода ткани. Проверить на практике полученные на этом уроке знания: реализовать
|
||||||
|
# абстрактные классы для основных классов проекта, проверить на практике работу декоратора @property.
|
||||||
|
#
|
||||||
|
|
||||||
|
from abc import ABC, abstractmethod
|
||||||
|
|
||||||
|
class Clotnes(ABC):
|
||||||
|
count_material = 0
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def consum(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class Coat(Clotnes):
|
||||||
|
def __init__(self, size):
|
||||||
|
self.size = size
|
||||||
|
Coat.count_material += self.consum # в родительский клас складывает все расходы ткани
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f'Пальто: размер {self.size}, требует ткани {self.consum:.2f}'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def consum(self):
|
||||||
|
return self.size / 6.5 + 0.5
|
||||||
|
|
||||||
|
class Costume(Clotnes):
|
||||||
|
def __init__(self, height):
|
||||||
|
self.height = height
|
||||||
|
Costume.count_material += self.consum # в родительский клас складывает все расходы ткани
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f'Костюм: рост {self.height}, требует ткани {self.consum:.2f}'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def consum(self):
|
||||||
|
return 2*self.height + 0.3
|
||||||
|
|
||||||
|
|
||||||
|
coat_1 = Coat(36)
|
||||||
|
print(coat_1)
|
||||||
|
coat_2 = Coat(42)
|
||||||
|
print(coat_2)
|
||||||
|
|
||||||
|
costum_1 = Costume(140)
|
||||||
|
print(costum_1)
|
||||||
|
costum_2 = Costume(160)
|
||||||
|
print(costum_2)
|
||||||
|
|
||||||
|
print(f'Расход ткани на пальто составил {coat_1.count_material:.2f}')
|
||||||
|
print(f'Расход ткани на костюмы составил {costum_2.count_material:.2f}')
|
||||||
|
print(f'Общий расход ткани {coat_1.count_material+costum_2.count_material:.2f}')
|
||||||
65
less-07/task-03.py
Normal file
65
less-07/task-03.py
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
# Реализовать программу работы с органическими клетками, состоящими из ячеек. Необходимо создать класс Клетка.
|
||||||
|
# В его конструкторе инициализировать параметр, соответствующий количеству ячеек клетки (целое число).
|
||||||
|
# В классе должны быть реализованы методы перегрузки арифметических операторов:
|
||||||
|
# сложение (__add__()), вычитание (__sub__()), умножение (__mul__()), деление (__truediv__()).
|
||||||
|
# Данные методы должны применяться только к клеткам и выполнять увеличение, уменьшение, умножение
|
||||||
|
# и целочисленное (с округлением до целого) деление клеток, соответственно.
|
||||||
|
|
||||||
|
class Cell:
|
||||||
|
__count = 0
|
||||||
|
|
||||||
|
def __init__(self, count):
|
||||||
|
if count <= 0:
|
||||||
|
raise ValueError("error count <=0")
|
||||||
|
self.__count = count
|
||||||
|
|
||||||
|
def make_order(self, len_row):
|
||||||
|
res = ["*" * len_row] * (self.__count // len_row)
|
||||||
|
if self.__count % len_row:
|
||||||
|
res.append("*" * (self.__count % len_row))
|
||||||
|
return "\n".join(res)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f'{self.__count}'
|
||||||
|
|
||||||
|
def __add__(self, other):
|
||||||
|
if not (isinstance(other, Cell)):
|
||||||
|
raise ValueError("error other class")
|
||||||
|
return Cell(self.__count + other.__count)
|
||||||
|
|
||||||
|
def __sub__(self, other):
|
||||||
|
if not (isinstance(other, Cell)):
|
||||||
|
raise ValueError("error other class")
|
||||||
|
res = self.__count - other.__count
|
||||||
|
if res > 0:
|
||||||
|
return Cell(self.__count - other.__count)
|
||||||
|
else:
|
||||||
|
raise ValueError("error defference <=0")
|
||||||
|
|
||||||
|
def __mul__(self, other):
|
||||||
|
if not (isinstance(other, Cell)):
|
||||||
|
raise ValueError("error other class")
|
||||||
|
return Cell(self.__count * other.__count)
|
||||||
|
|
||||||
|
def __floordiv__(self, other):
|
||||||
|
if not (isinstance(other, Cell)):
|
||||||
|
raise ValueError("error other class")
|
||||||
|
#так как Cell иницилизируеться только целым положительным кол-вом ячеек то деления на ноль не будет
|
||||||
|
#однако при self.__count < other.__count будет иницилизироваться класс нулевым кол-вом ячеек
|
||||||
|
if (self.__count < other.__count):
|
||||||
|
raise ValueError("error integer division return zero")
|
||||||
|
else:
|
||||||
|
return Cell(self.__count // other.__count)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cell_1 = Cell(12)
|
||||||
|
cell_2 = Cell(8)
|
||||||
|
print(cell_1.make_order(5))
|
||||||
|
try:
|
||||||
|
print(f"+ -> {cell_1 + cell_2}")
|
||||||
|
print(f"- -> {cell_1 - cell_2}")
|
||||||
|
print(f"* -> {cell_1 * cell_2}")
|
||||||
|
print(f"/ -> {cell_1 // cell_2}")
|
||||||
|
except ValueError as exp:
|
||||||
|
print(exp)
|
||||||
Loading…
x
Reference in New Issue
Block a user