Напишите (в очередной раз ☹) класс Square(x, y, w) со следующими свойствами:
x и y — это координаты левой нижней вершины квадрата, а w — его ширина
Дополнительно поддерживаются поля h (равное w), s (равное площади квадрата) и center (кортеж с координатами середины квадрата)
Все поля, кроме s, можно менять
- попытка изменить площадь ни к чему не приводит ничего не происходит
- изменение центра или координат вершины влияют друг на друга, а ширина и высота остаются прежней
- изменение ширины или высоты не влияют на координаты вершины, но сдвигают центр
Поле center должно поддерживать операцию добавления кортежа из двух чисел — это смещение середины квадрата
При сопоставлении в операторе match / case все эти поля можно использовать как именные параметры, а x, y и w — как позиционные
1 for x, y, w in (1, 2, 0), (1, 1, 7), (3, 4, 10), (5, 3, 6):
2 Sq = Square(x, y, w)
3 Sq.center += -1, -1
4 match Sq:
5 case Square(_, _, 0):
6 print("Zero square")
7 case Square(0, 0, _):
8 print("Started from 0")
9 case Square(s=100):
10 print("10x10 square")
11 case Square(center=c) if c[0] == round(c[0]) and c[1] == round(c[1]):
12 print("Even-sized square")
- Подсказка 1: Очевидно, что все поля, кроме x, y, w, — дескрипторы
Единственный трюк в этой задаче — это +=. Он основан на том, что center — это тоже кортеж, так что если в setter-е этого center вам приедет кортеж из четырёх чисел, вы знаете, что делать ☺
Zero square Started from 0 10x10 square Even-sized square