Найти - Пользователи
Полная версия: Прямоугольник на Питоне
Начало » Центр помощи » Прямоугольник на Питоне
1
Hecate1988
Помогите решить задачу:
Создайте класс «Прямоугольник», у которого необходимо реализовать два поля (ширина и высота) и несколько обязательных методов:

Метод сравнения прямоугольников по площади.
Метод сложения прямоугольников (площадь суммарного прямоугольника должна быть равна сумме площадей прямоугольников, которые вы складываете).
Методы умножения прямоугольника на число n (это должно увеличить площадь базового прямоугольника в n раз).
В классе могут быть созданы и дополнительные (вспомогательные методы)

Несколько уточнений:

1. Методы сложения, умножения, деления и т.д. обязательно должны возвращать новый экземпляр класса Прямоугольник!

2. Для умножения, сложения, сравнения, обязательно нужно переопределять “магичиские” методы. Для умножение есть встроенный метод __mul__

3. Когда в результате мат. действий создаете новый экземпляр класса Прямоугольник, то у этого экземпляра, перемножение сторон, должно давать нужную площадь. Это тоже важно

https://ru.onlinemschool.com/math/formula/rectangle/

class Rectangle:

def __init__(self, width, height):
self.width = width
self.height = height

def get_square(self):
return self.width * self.height

def __eq__(self, other):
return self.get_square() == other.get_square()

def __add__(self, other):
width = self.width + other.width
height = self.height + other.height
return Rectangle(width, height)

def __mul__(self, n):
width = self.width * n
height = self.height * n
return Rectangle(width, height)

def __str__(self):
return f'Rectangle(width={self.width}, height={self.height})'


r1 = Rectangle(2, 4)
r2 = Rectangle(3, 6)
assert r1.get_square() == 8
assert r2.get_square() == 18

r3 = r1 + r2
assert r3.get_square() == 26

r4 = r1 * 4
assert r4.get_square() == 32

Я сделала задачу, но в
r3 = r1 + r2 assert r3.get_square() == 26 r4 = r1 * 4 assert r4.get_square() == 32
выбивает ошибки: AssertionError
 [code python][code python][code python][/code][/code][/code]
py.user.next
Изучай математику получше
  
>>> class Rectangle:
...     def __init__(self, width, height):
...         self.width = width
...         self.height = height
...     
...     def get_square(self):
...         return self.width * self.height
...     
...     def __eq__(self, other):
...         return self.get_square() == other.get_square()
...     
...     def __add__(self, other):
...         width = 1
...         height = self.get_square() + other.get_square()
...         return Rectangle(width, height)
...     
...     def __mul__(self, n):
...         width = self.width * n
...         height = self.height
...         return Rectangle(width, height)
...     
...     def __str__(self):
...         return f'Rectangle(width={self.width}, height={self.height})'
... 
>>> r1 = Rectangle(2, 4)
>>> r2 = Rectangle(3, 6)
>>> assert r1.get_square() == 8
>>> assert r2.get_square() == 18
>>> 
>>> r3 = r1 + r2
>>> assert r3.get_square() == 26
>>> 
>>> r4 = r1 * 4
>>> assert r4.get_square() == 32
>>>
Не так уж хорошо ты знаешь школьную математику, как тебе кажется.
py.user.next
Hecate1988
Метод сравнения прямоугольников по площади.
Hecate1988
2. Для умножения, сложения, сравнения, обязательно нужно переопределять “магичиские” методы.
Тут ещё и преподаватель тоже “гений”. С какого-то перепугу у него сравнение прямоугольников только по площади должно проходить через метод __eq__. Дело в том, что метод __eq__ запускается по операции ==, что означает равенство. А прямоугольники равны тогда, когда равны их соответствующие стороны. Площади могут быть равны у совершенно разных прямоугольников. Даже у треугольника или круга площадь может быть равна площади прямоугольника, но из этого же не следует, что это равные фигуры с какого-то перепугу.
Hecate1988
Огромное спасибо за ответы!С математикой действительно есть проблемы))
_AlexDev_
Можно решить таким образом, плюс немного оптимизировать скорость выполнения.

class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height

@property
def get_square(self):
return self.width * self.height

def __eq__(self, other):
return self.get_square == other.get_square

def __add__(self, other):
combined_area = self.get_square + other.get_square
return Rectangle(combined_area ** 0.5, combined_area / (combined_area ** 0.5))

def __mul__(self, n):
return Rectangle(self.width, n * self.height)

def __str__(self):
return f"Rectangle "

r1 = Rectangle(2, 4)
r2 = Rectangle(3, 6)
assert r1.get_square == 8, ‘Test1’
assert r2.get_square == 18, ‘Test2’
r3 = r1 + r2
assert r3.get_square == 26, ‘Test3’
r4 = r1 * 4
assert r4.get_square == 32, ‘Test4’

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB