Время выполнения
30-60 минут
Уровень сложности
Низкий/Средний
Цели
- улучшение навыков учащегося в создании классов с нуля;
- определение и использование переменных экземпляра;
- определение и использование методов.
Сценарий
Ваша задача - реализовать класс под названием Weeker. Да, Ваши глаза не обманывают Вас - это название происходит от того факта, что объекты этого класса могут хранить и управлять днями недели.
Конструктор класса принимает один аргумент - строку. Строка представляет собой название дня недели, и единственные допустимые значения должны поступать из следующего набора:
Mon Tue Wed Thu Fri Sat Sun
Вызов конструктора с аргументом извне этого набора должен вызвать исключение WeekDayError (определите его самостоятельно; не беспокойтесь, скоро мы поговорим об объективной природе исключений). Класс должен предоставить следующие возможности:
- объекты класса должны быть "печатаемыми", т.е. они должны иметь возможность неявно преобразовывать себя в строки той же формы, что и аргументы конструктора;
- класс должен быть оснащен однопараметрическими методами с именами
add_days(n)
иsubtract_days(n)
, где n является целым числом число и обновление дня недели, хранящегося внутри объекта, таким образом, чтобы отразить изменение даты на указанное количество дней вперед или назад. - все свойства объекта должны быть скрытыми;
Заполните шаблон, который мы предоставили в редакторе, запустите свой код и проверьте, выглядит ли Ваш результат так же, как наш.
Ожидаемый вывод
Mon
Thu
Sun
Sorry, I can't serve your request.
Code
class WeekDayError(Exception):pass
class Weeker:
#
# Напишите здесь код.
#
def __init__(self, day):
#
# Напишите здесь код.
#
def __str__(self):
#
# Напишите здесь код.
#
def add_days(self, n):
#
# Напишите здесь код.
#
def subtract_days(self, n):
#
# Напишите здесь код.
#
try:
weekday = Weeker('Mon')
print(weekday)
weekday.add_days(15)
print(weekday)
weekday.subtract_days(23)
print(weekday)
weekday = Weeker('Monday')
except WeekDayError:
print("Sorry, I can't serve your request.")