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