# Реализовать программу работы с органическими клетками, состоящими из ячеек. Необходимо создать класс Клетка. В его
# конструкторе инициализировать параметр, соответствующий количеству ячеек клетки (целое число). В классе должны быть
# реализованы методы перегрузки арифметических операторов: сложение (__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: int):
        self.cells = cells

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

    def __sub__(self, other):
        if self.cells < other.cells:
            return Cell(other.cells - self.cells)
        else:
            return Cell(self.cells - other.cells)

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

    def __floordiv__(self, other):
        if self.cells < other.cells:
            return Cell(other.cells // self.cells)
        else:
            return Cell(self.cells // other.cells)

    def __str__(self):
        return f"{self.cells}"

    def make_order(self, rows):
        [print(f"{rows * '*'}") for num in range(self.cells//rows)]
        print(f"{self.cells % rows* '*'}") if self.cells % rows != 0 else False


user_cell_1 = Cell(int(input("Введите количество ячеек в 1-ой клетке: ")))
user_cell_2 = Cell(int(input("Введите количество ячеек во 2-ой клетке: ")))
user_rows = (int(input("Введите количество ячеек в ряду для организации клетки: ")))

print(f"Клетка Nº1:")
user_cell_1.make_order(user_rows)
print(f"Клетка Nº2:")
user_cell_2.make_order(user_rows)

print(f"Резутат объединения двух клеток: {user_cell_1 + user_cell_2}")
(user_cell_1 + user_cell_2).make_order(user_rows)
print(f"Резутат вычитание двух клеток: {user_cell_1 - user_cell_2}")
(user_cell_1 - user_cell_2).make_order(user_rows)
print(f"Резутат создания общей клетки из двух при умножении: {user_cell_1 * user_cell_2}")
(user_cell_1 * user_cell_2).make_order(user_rows)
print(f"Резутат создания общей клетки из двух при делении: {user_cell_1 // user_cell_2}")
(user_cell_1 // user_cell_2).make_order(user_rows)
