# 3)	Реализовать программу работы с органическими клетками, состоящими из ячеек. Необходимо создать класс
# Клетка. В его конструкторе инициализировать параметр, соответствующий количеству ячеек клетки (целое число).
# В классе должны быть реализованы методы перегрузки арифметических операторов: сложение (__add__()),
# вычитание (__sub__()), умножение (__mul__()), деление (__truediv__()).
# Данные методы должны применяться только к клеткам и выполнять увеличение, уменьшение, умножение и целочисленное
# (с округлением до целого) деление клеток, соответственно.
# Сложение. Объединение двух клеток. При этом число ячеек общей клетки должно равняться сумме ячеек исходных
# двух клеток.
# Вычитание. Участвуют две клетки. Операцию необходимо выполнять только если разность количества ячеек двух клеток
# больше нуля, иначе выводить соответствующее сообщение.
# Умножение. Создается общая клетка из двух. Число ячеек общей клетки определяется как произведение количества ячеек
# этих двух клеток.
# Деление. Создается общая клетка из двух. Число ячеек общей клетки определяется как целочисленное деление количества
# ячеек этих двух клеток.
# В классе необходимо реализовать метод make_order(), принимающий экземпляр класса и количество ячеек в ряду.
# Данный метод позволяет организовать ячейки по рядам.
# Метод должен возвращать строку вида *****\n*****\n*****..., где количество ячеек между \n равно переданному аргументу.
# Если ячеек на формирование ряда не хватает, то в последний ряд записываются все оставшиеся.

class Cell:
    def __init__(self, num_cell):
        self.number = int(num_cell)

    def __add__(self, other):
        return print(f'Итог сложения: {self.number + other.number}')

    def __sub__(self, other):
        return print(f'Итог вычитания: {self.number - other.number}') if self.number > other.number else print(
            f'Вычитание приведёт к исчезновению клетки')

    def __mul__(self, other):
        return print(f'Итог умножения: {self.number * other.number}')

    def __truediv__(self, other):
        return print(f'Итог деления первой клетки на вторую: {self.number // other.number}')\
            if self.number >= other.number else print(
            f'Итог деления второй клетки на первую: {other.number // self.number}')

    def make_order(self, num_row):
        return print("".join(
            ["*" * num_row + "\n" if i < self.number // num_row else "*" * (self.number % num_row) for i in
             range(self.number // num_row + 1)]))


c1 = Cell(28)
c2 = Cell(8)
(c1 + c2)
(c1 - c2)
(c1 * c2)
(c1 / c2)
(c1.make_order(8))

268a5ad22b505dfb76b0303249f7244ebddd19d4
class Cell:
    <mask token>

    def __add__(self, other):
        return print(f'Итог сложения: {self.number + other.number}')

    def __sub__(self, other):
        return print(f'Итог вычитания: {self.number - other.number}'
            ) if self.number > other.number else print(
            f'Вычитание приведёт к исчезновению клетки')
    <mask token>

    def __truediv__(self, other):
        return print(
            f'Итог деления первой клетки на вторую: {self.number // other.number}'
            ) if self.number >= other.number else print(
            f'Итог деления второй клетки на первую: {other.number // self.number}'
            )

    def make_order(self, num_row):
        return print(''.join([('*' * num_row + '\n' if i < self.number //
            num_row else '*' * (self.number % num_row)) for i in range(self
            .number // num_row + 1)]))


<mask token>

class Cell:

    def __init__(self, num_cell):
        self.number = int(num_cell)

    def __add__(self, other):
        return print(f'Итог сложения: {self.number + other.number}')

    def __sub__(self, other):
        return print(f'Итог вычитания: {self.number - other.number}'
            ) if self.number > other.number else print(
            f'Вычитание приведёт к исчезновению клетки')
    <mask token>

    def __truediv__(self, other):
        return print(
            f'Итог деления первой клетки на вторую: {self.number // other.number}'
            ) if self.number >= other.number else print(
            f'Итог деления второй клетки на первую: {other.number // self.number}'
            )

    def make_order(self, num_row):
        return print(''.join([('*' * num_row + '\n' if i < self.number //
            num_row else '*' * (self.number % num_row)) for i in range(self
            .number // num_row + 1)]))


<mask token>

class Cell:

    def __init__(self, num_cell):
        self.number = int(num_cell)

    def __add__(self, other):
        return print(f'Итог сложения: {self.number + other.number}')

    def __sub__(self, other):
        return print(f'Итог вычитания: {self.number - other.number}'
            ) if self.number > other.number else print(
            f'Вычитание приведёт к исчезновению клетки')

    def __mul__(self, other):
        return print(f'Итог умножения: {self.number * other.number}')

    def __truediv__(self, other):
        return print(
            f'Итог деления первой клетки на вторую: {self.number // other.number}'
            ) if self.number >= other.number else print(
            f'Итог деления второй клетки на первую: {other.number // self.number}'
            )

    def make_order(self, num_row):
        return print(''.join([('*' * num_row + '\n' if i < self.number //
            num_row else '*' * (self.number % num_row)) for i in range(self
            .number // num_row + 1)]))


<mask token>
c1 + c2
c1 - c2
c1 * c2
c1 / c2
c1.make_order(8)

class Cell:

    def __init__(self, num_cell):
        self.number = int(num_cell)

    def __add__(self, other):
        return print(f'Итог сложения: {self.number + other.number}')

    def __sub__(self, other):
        return print(f'Итог вычитания: {self.number - other.number}'
            ) if self.number > other.number else print(
            f'Вычитание приведёт к исчезновению клетки')

    def __mul__(self, other):
        return print(f'Итог умножения: {self.number * other.number}')

    def __truediv__(self, other):
        return print(
            f'Итог деления первой клетки на вторую: {self.number // other.number}'
            ) if self.number >= other.number else print(
            f'Итог деления второй клетки на первую: {other.number // self.number}'
            )

    def make_order(self, num_row):
        return print(''.join([('*' * num_row + '\n' if i < self.number //
            num_row else '*' * (self.number % num_row)) for i in range(self
            .number // num_row + 1)]))


c1 = Cell(28)
c2 = Cell(8)
c1 + c2
c1 - c2
c1 * c2
c1 / c2
c1.make_order(8)

# 3)	Реализовать программу работы с органическими клетками, состоящими из ячеек. Необходимо создать класс
# Клетка. В его конструкторе инициализировать параметр, соответствующий количеству ячеек клетки (целое число).
# В классе должны быть реализованы методы перегрузки арифметических операторов: сложение (__add__()),
# вычитание (__sub__()), умножение (__mul__()), деление (__truediv__()).
# Данные методы должны применяться только к клеткам и выполнять увеличение, уменьшение, умножение и целочисленное
# (с округлением до целого) деление клеток, соответственно.
# Сложение. Объединение двух клеток. При этом число ячеек общей клетки должно равняться сумме ячеек исходных
# двух клеток.
# Вычитание. Участвуют две клетки. Операцию необходимо выполнять только если разность количества ячеек двух клеток
# больше нуля, иначе выводить соответствующее сообщение.
# Умножение. Создается общая клетка из двух. Число ячеек общей клетки определяется как произведение количества ячеек
# этих двух клеток.
# Деление. Создается общая клетка из двух. Число ячеек общей клетки определяется как целочисленное деление количества
# ячеек этих двух клеток.
# В классе необходимо реализовать метод make_order(), принимающий экземпляр класса и количество ячеек в ряду.
# Данный метод позволяет организовать ячейки по рядам.
# Метод должен возвращать строку вида *****\n*****\n*****..., где количество ячеек между \n равно переданному аргументу.
# Если ячеек на формирование ряда не хватает, то в последний ряд записываются все оставшиеся.

class Cell:
    def __init__(self, num_cell):
        self.number = int(num_cell)

    def __add__(self, other):
        return print(f'Итог сложения: {self.number + other.number}')

    def __sub__(self, other):
        return print(f'Итог вычитания: {self.number - other.number}') if self.number > other.number else print(
            f'Вычитание приведёт к исчезновению клетки')

    def __mul__(self, other):
        return print(f'Итог умножения: {self.number * other.number}')

    def __truediv__(self, other):
        return print(f'Итог деления первой клетки на вторую: {self.number // other.number}')\
            if self.number >= other.number else print(
            f'Итог деления второй клетки на первую: {other.number // self.number}')

    def make_order(self, num_row):
        return print("".join(
            ["*" * num_row + "\n" if i < self.number // num_row else "*" * (self.number % num_row) for i in
             range(self.number // num_row + 1)]))


c1 = Cell(28)
c2 = Cell(8)
(c1 + c2)
(c1 - c2)
(c1 * c2)
(c1 / c2)
(c1.make_order(8))
