Skip to content
2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/pythoncourse.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

70 changes: 70 additions & 0 deletions Lesson 7/Task 2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# 2) Реализовать проект расчета суммарного расхода ткани на производство одежды. Основная
# сущность (класс) этого проекта — одежда, которая может иметь определенное название. К
# типам одежды в этом проекте относятся пальто и костюм. У этих типов одежды существуют
# параметры: размер (для пальто) и рост (для костюма). Это могут быть обычные числа: V и
# H, соответственно.
# Для определения расхода ткани по каждому типу одежды использовать формулы: для пальто
# (V/6.5 + 0.5), для костюма (2*H + 0.3). Проверить работу этих методов на реальных данных.
# Реализовать общий подсчет расхода ткани. Проверить на практике полученные на этом уроке
# знания: реализовать абстрактные классы для основных классов проекта, проверить на
# практике работу декоратора @property
from abc import ABC, abstractmethod


class Clothes(ABC):
name = ''
units = []

def add_unit(self, unit):
self.units.append(unit)

@abstractmethod
def requrement(self):
pass

def __str__(self):
return self.name

@property
def calc_requrements(self):
total = 0
for el in self.units:
print(f'Для {el.name} требуется {el.requrement()} ткани')
total += el.requrement()
return f'Всего требуется {total} ткани'


class Coat(Clothes):
size = 0

def __init__(self, size):
self.name = 'Пальто'
self.size = size
super().add_unit(self)

def requrement(self):
return self.size / 6.5 + 0.5


class Suit(Clothes):
height = 0

def __init__(self, height):
self.name = 'Костюм'
self.height = height
super().add_unit(self)

def requrement(self):
return 2 * self.height + 0.3


coat1 = Coat(65)
suit1 = Suit(20)

print(coat1)
print(coat1.requrement())

print(suit1)

print(Clothes.units)
print(coat1.calc_requrements)
82 changes: 82 additions & 0 deletions Lesson 7/Task 3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# 3) Реализовать программу работы с органическими клетками, состоящими из ячеек. Необходимо
# создать класс Клетка. В его конструкторе инициализировать параметр, соответствующий
# количеству ячеек клетки (целое число). В классе должны быть реализованы методы
# © geekbrains.ru 20
# перегрузки арифметических операторов: сложение (__add__()), вычитание (__sub__()),
# умножение (__mul__()), деление (__truediv__()). Данные методы должны применяться только
# к клеткам и выполнять увеличение, уменьшение, умножение и целочисленное (с округлением
# до целого) деление клеток, соответственно.
# Сложение. Объединение двух клеток. При этом число ячеек общей клетки должно равняться
# сумме ячеек исходных двух клеток.
# Вычитание. Участвуют две клетки. Операцию необходимо выполнять только если разность
# количества ячеек двух клеток больше нуля, иначе выводить соответствующее сообщение.
# Умножение. Создается общая клетка из двух. Число ячеек общей клетки определяется как
# произведение количества ячеек этих двух клеток.
# Деление. Создается общая клетка из двух. Число ячеек общей клетки определяется как
# целочисленное деление количества ячеек этих двух клеток.
# В классе необходимо реализовать метод make_order(), принимающий экземпляр класса и
# количество ячеек в ряду. Данный метод позволяет организовать ячейки по рядам.
# Метод должен возвращать строку вида *****\n*****\n*****..., где количество ячеек между \n
# равно переданному аргументу. Если ячеек на формирование ряда не хватает, то в последний
# ряд записываются все оставшиеся.
# Например, количество ячеек клетки равняется 12, количество ячеек в ряду — 5. Тогда метод
# make_order() вернет строку: *****\n*****\n**.
# Или, количество ячеек клетки равняется 15, количество ячеек в ряду — 5. Тогда метод
# make_order() вернет строку: *****\n*****\n*****.

class Cell:

def __init__(self, cells=0):
self._cells_count = cells
self._cells_row = 7
self._cell_struct = []
self._construct_cell()

def __add__(self, other):
return Cell(self._cells_count + other._cells_count)

def __sub__(self, other):
if self._cells_count - other._cells_count <= 0:
raise TypeError('Операция не возможна')
else:
return Cell(self._cells_count - other._cells_count)

def __mul__(self, other):
return Cell(self._cells_count * other._cells_count)

def __truediv__(self, other):
if other._cells_count == 0:
raise ZeroDivisionError('Операция не возможна')
else:
return Cell(self._cells_count // other._cells_count)

def make_order(self, cell_row):
self._cells_row = cell_row
self._construct_cell()

def _construct_cell(self):
self._cell_struct.clear()
cell_parts = self._cells_count / self._cells_row if self._cells_count % self._cells_row == 0 else (
self._cells_count // self._cells_row) + 1
for i in range(int(cell_parts)):
mesh = self._cells_row if self._cells_count - self._cells_row * (
i) > self._cells_row else self._cells_count - self._cells_row * (i)
self._cell_struct.append(mesh * '*')

def __str__(self):
return '\n'.join(self._cell_struct)


my_cell1 = Cell(7)

my_cell2 = Cell(0)

print('Клетка 1')
print(my_cell1)
print('Клетка 2')
print(my_cell2)

my_cell3 = my_cell1 / my_cell2
my_cell3.make_order(4)
print('Клетка 3')
print(my_cell3)
61 changes: 61 additions & 0 deletions Lesson 7/Task_1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# 1) Реализовать класс 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 (двух матриц). Результатом сложения должна быть новая матрица.
# Подсказка: сложение элементов матриц выполнять поэлементно — первый элемент первой
# строки первой матрицы складываем с первым элементом первой строки второй матрицы и т.д.

import numpy as np


class Matrix:
_sub_matrix = []

def __init__(self, user_matrix):
self.sub_matrix = user_matrix

def __str__(self):
print(*self.sub_matrix, sep='\n')

def validate_matrix(self, other):
if len(self.sub_matrix) != len(other.sub_matrix):
return False
else:
for i in range(len(self.sub_matrix)):
if len(self.sub_matrix[i]) != len(other.sub_matrix[i]):
return False
return True


def __add__(self, other):
if self.validate_matrix(other):
return np.array(self.sub_matrix) + np.array(other.sub_matrix)
else:
return 'Сложить можно только матрицы одного размера'


user_list1 = [[1, 2], [3, 4]]
user_list2 = [[5, 6], [7, 8]]

user_matrix1 = Matrix(user_list1)
user_matrix2 = Matrix(user_list2)

user_matrix1.__str__()
user_matrix2.__str__()

user_matrix1.__add__(user_matrix2)

print(user_matrix1.__add__(user_matrix2))