def __sub__(self, other): """Перегрузка операции вычитания""" if isinstance(other, Cell): result = self._mesh_count - other._mesh_count if result > 0: return Cell(result) raise DmicherException( "Невозможно выполнить вычетание: результат меньше нуля.") raise DmicherException( "Из клетки нельзя вычитать объекты других классов.")
def __truediv__(self, other): """Перегрузка оператора честного деления""" if isinstance(other, Cell): result = self._mesh_count // other._mesh_count if result < 1: raise DmicherException( "Невозможно выполнить деление: клетка окажется равной нулю." ) return Cell(result) raise DmicherException( "Клетку нельзя умножить на объекты других классов.")
def __init__(self, content: [[int]]): """Инициализация матрицы с содержимым""" if len(content) < 1 or len(content[0]) < 1: raise DmicherException( "Невозможно создать матрицу нулевого размера") self._rows_count = len(content) self._columns_count = len(content[0]) for row in content: if self._columns_count != len(row): raise DmicherException( "Создание непрямоугольной матрицы не допустимо в этом объекте. " + "Убедитесь, что все строки имеют одинаковую длину.") self._content = content
def __init__(self, date_string: str): """Инициирует объект""" try: self.__day, self.__month, self.__year = Date._parce(date_string) except DmicherException as ex: raise DmicherException("Невозможно создать объект Date.\r\n\t" + ex.txt)
def __init__(self, mesh_count: int): """Инициирует объект заданным количество ячеек :params mesh_count: количество ячеек, занятых клеткой""" if mesh_count < 1: raise DmicherException( "Невозможно создать клетку: размер меньше чем 1 ячейка.") self._mesh_count = mesh_count
def _parce(value: str): """Разбирает строку на значимые данные, возвращает кортеж в формате (d, m, y)""" parts = value.split('-') if len(parts) != 3: raise DmicherException("Неверный формат даты") for num in parts: if not num.isdigit(): raise DmicherException("Значение [" + num + "] должно было быть числом.") day, month, year = [int(x) for x in parts] is_valid, message = Date._date_validation(day, month, year) if not is_valid: raise DmicherException("Неприемлемый формат даты. " + message) return (day, month, year)
def make_order(self, row_length: int): """Организует ячейки по рядам""" if row_length < 1: raise DmicherException( "Невозможно рассчитать ряды: размер ряда меньше 1.") for i in range(self._mesh_count // row_length): print("*" * row_length) print('*' * (self._mesh_count % row_length))
def __add__(self, other): """Складывает две матрицы""" if type(other) is not Matrix: raise DmicherException( "Невозможно сложить матрицу с объектом, не являющимся матрицей" ) if self._rows_count != other._rows_count or self._columns_count != other._columns_count: raise DmicherException( "Невозможно сложить матрицы. Они имеют разный размер.") new_content = [] for i in range(self._rows_count): row = [] for j in range(self._columns_count): row.append(self._content[i][j] + other._content[i][j]) new_content.append(row) return Matrix(new_content)
def set_color_time(self, color: str, new_time: float) -> None: """Управляет настройками светофора: изменяет время для указанного цвета :params color: настраиваемый цвет: "красный", "жёлтый" или "зелёный" -> str :params new_time: устанавливаемое время действия цвета -> float """ color = color.strip().lower() if color in self.__colors__: self.__colors__[color] = new_time else: raise DmicherException("На светофоре отсутствует указанный цвет")
def __mul__(self, other): """Перегрузка операции умножения""" if isinstance(other, Cell): return Cell(self._mesh_count * other._mesh_count) raise DmicherException( "Клетку нельзя умножить на объекты других классов.")
def __add__(self, other): """Перегрузка операции сложения""" if isinstance(other, Cell): return Cell(self._mesh_count + other._mesh_count) raise DmicherException( "К клетке нельзя прибавлять объекты других классов.")