class Vector: def __init__(self, x, y): self.x = x self.y = y def __add__(self, other): if isinstance(other, Number): return Vector(self.x + other.value, self.y + other.value) def __str__(self): return f"Vector({self.x},{self.y})" class Number: def __init__(self, value) -> None: self.value = value def __radd__(self, other): if isinstance(other, Vector): return Number(other.x + other.y + self.value) def __str__(self) -> str: return f"Number({self.value})" class Rectangle: def __init__(self, width, height) -> None: self.width = width self.height = height def __add__(self, other): return Rectangle(self.width + other.width, self.height + other.height) def __str__(self): return f"Rectangle({self.width}x{self.height})" class Vector: def __init__(self, x, y): self.x = x self.y = y def __repr__(self): return f"Vector({self.x}, {self.y})" def __mul__(self, other): return self.x * other.x + self.y * other.y class Order: def __init__(self, cart: list, customer): self.cart = cart self.customer = customer def __add__(self, other): new_cart = self.cart.copy() new_cart.append(other) return Order(new_cart, self.customer) def __radd__(self, other): new_cart = self.cart.copy() new_cart.insert(0, other) return Order(new_cart, self.customer) def __sub__(self, other): new_cart = self.cart.copy() if other in self.cart: new_cart.remove(other) return Order(new_cart, self.customer) def __rsub__(self, other): return self.__sub__(other) class Vector: def __init__(self, *args): foo = [] for i in args: if isinstance(i, int): foo.append(i) self.values = sorted(foo) def __str__(self): if self.values: foo = [str(i) for i in self.values] return f"Вектор({', '.join(foo)})" else: return "Пустой вектор" def __add__(self, other): if isinstance(other, int): foo = [i+other for i in self.values] return Vector(*foo) elif isinstance(other, Vector): if len(other.values) == len(self.values): foo = [sum(i) for i in zip(self.values, other.values)] return Vector(*foo) else: print("Сложение векторов разной длины недопустимо") else: print(f"Вектор нельзя сложить с {other}") def __mul__(self, other): if isinstance(other, int): foo = [i * other for i in self.values] return Vector(*foo) elif isinstance(other, Vector): if len(other.values) == len(self.values): foo = [i[0]*i[1] for i in zip(self.values, other.values)] return Vector(*foo) else: print("Умножение векторов разной длины недопустимо") else: print(f"Вектор нельзя умножать с {other}") def main(): ''' order = Order(['banana', 'apple'], 'Гена Букин') order_2 = order + 'orange' assert order.cart == ['banana', 'apple'] assert order.customer == 'Гена Букин' assert order_2.cart == ['banana', 'apple', 'orange'] order = 'mango' + order assert order.cart == ['mango', 'banana', 'apple'] order = 'ice cream' + order assert order.cart == ['ice cream', 'mango', 'banana', 'apple'] order = order - 'banana' assert order.cart == ['ice cream', 'mango', 'apple'] order3 = order - 'banana' assert order3.cart == ['ice cream', 'mango', 'apple'] order = order - 'mango' assert order.cart == ['ice cream', 'apple'] order = 'lime' - order assert order.cart == ['ice cream', 'apple'] print('Good') ''' ''' r1 = Rectangle(5, 10) assert r1.width == 5 assert r1.height == 10 print(r1) r2 = Rectangle(20, 5) assert r2.width == 20 assert r2.height == 5 print(r2) r3 = r2 + r1 assert isinstance(r3, Rectangle) assert r3.width == 25 assert r3.height == 15 print(r3) ''' ''' v = Vector(2, 3) num = Number(5) print(num + v) ''' if __name__ == '__main__': main()