Время выполнения
30-60 минут
Уровень сложности
Низкий/Средний
Цели
- улучшение навыков учащегося в создании классов с нуля;
- определение и использование переменных экземпляра;
- определение и использование методов.
Сценарий
Давайте посетим совершенно особенное место - плоскость с декартовой системой координат (Вы можете узнать больше об этой концепции здесь: Прямоугольная система координат).
Каждую точку, расположенную на плоскости, можно описать как пару координат, обычно называемую x и y. Мы хотим, чтобы Вы написали класс Python, который хранит обе координаты как числа с плавающей запятой. Более того, мы хотим, чтобы объекты этого класса считали расстояния между любой из двух точек, расположенных на плоскости.
Задача довольно проста, если Вы воспользуетесь функцией с именем hypot() (доступна в модуле math), которая считает длину гипотенузы прямоугольного треугольника (подробнее здесь: Гипотенуза) и здесь: Trigonometric functions.
Вот как мы представляем себе класс:
- он называется
Point
; - его конструктор принимает два аргумента (x и y соответственно), оба из которых по умолчанию равны нулю;
- все свойства должны быть скрытыми;
- класс содержит два метода без параметров, названные
getx()
иgety()
, которые возвращают каждую из двух координат (координаты хранятся скрыто, поэтому они не могут быть доступны непосредственно из объекта); - класс предоставляет метод под названием
distance_from_xy(x, y)
, который вычисляет и возвращает расстояние между точкой, хранящейся внутри объекта, и другой точкой, заданной как пара пунктов; - класс предоставляет метод под названием
distance_from_point(point)
, который вычисляет расстояние (как в предыдущем методе), но местоположение другой точки задается как другой объект класса Point;
Дополните шаблон, который мы предоставили в редакторе, запустите свой код и проверьте, выглядит ли Ваш результат так же, как наш.
Ожидаемый вывод
1.4142135623730951
1.4142135623730951
Code
import mathclass Point:
def __init__(self, x=0.0, y=0.0):
#
# Напишите здесь код.
#
def getx(self):
#
# Напишите здесь код.
#
def gety(self):
#
# Напишите здесь код.
#
def distance_from_xy(self, x, y):
#
# Напишите здесь код.
#
def distance_from_point(self, point):
#
# Напишите здесь код.
#
point1 = Point(0, 0)
point2 = Point(1, 1)
print(point1.distance_from_point(point2))
print(point2.distance_from_xy(2, 0))