Щомісяця наш партнер зустрічається зі своїм найкращим другом. У них обох дуже щільний графік, тож знайти слушну дату непросто! А оскільки графік щільний і в нас, партнер завжди уточнює можливі дати зустрічі з нами:
Під час дзвінка цього місяця партнер запитує нас:
Спантеличені, ми питаємо, що таке надцятий день. Партнер пояснює, що надцятий день - це вигадане поняття, яке означає дні місяця, що закінчуються на «-надцяте»:
Оскільки днів тижня теж сім, кожен день тижня гарантовано має рівно один надцятий день щомісяця.
Тепер, коли ми розуміємо, що таке надцятий день, ми перевіряємо свій календар. На надцятий четвер у нас нічого не заплановано, тож ми радо підтверджуємо дату партнерові.
Знайдіть точну дату зустрічі, знаючи місяць, рік, день тижня та тиждень.
Є шість значень тижня: first, second, third, fourth, last, teenth.
Наприклад, може знадобитися знайти дату зустрічі на перший понеділок січня 2018 року (1 січня 2018 року).
Так само може знадобитися знайти:
Тиждень teenth означає сім днів у місяці, які закінчуються на «-teenth» (13th, 14th, 15th, 16th, 17th, 18th і 19th).
Якщо треба знайти teenth-суботу серпня 1953 року, подивімося на його календар:
August 1953
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Звідси бачимо, що teenth-субота припадає на 15 серпня 1953 року.
Ми додали додатковий дескриптор тижня (fifth) для пʼятого дня тижня в місяці, якщо такий є.
Якщо пʼятого дня тижня в місяці немає, потрібно викликати виняток.
Іноді в коді доводиться і налаштовувати, і raise винятки. Коли ми це робимо, варто завжди додавати змістовне повідомлення про помилку, щоб показати, у чому джерело помилки. Це робить код зрозумілішим і значно спрощує налагодження.
Власні винятки можна створювати через нові класи винятків (докладніше див. classes), які зазвичай є підкласами Exception.
Якщо відомо, що джерело помилки буде похідним від певного типу винятку, можна успадкувати один із built in error types, що належать до класу Exception. Викликаючи помилку, все одно варто додати змістовне повідомлення.
Ця вправа вимагає створити власний виняток, який потрібно викликати/«кинути», коли функція meetup() отримує неприпустиме поєднання назви дня тижня й числа. Тести пройдуть лише тоді, коли ми налаштуємо відповідні винятки, викличемо їх через raise і додамо відповідні повідомлення про помилку.
Щоб налаштувати built-in exception, створімо class, який успадковує цей виняток. Коли ми викликаємо власний виняток із повідомленням, передаймо повідомлення як аргумент типу exception:
# subclassing the built-in ValueError to create MeetupDayException
class MeetupDayException(ValueError):
"""Exception raised when the Meetup weekday and count do not result in a valid date.
message: explanation of the error.
"""
def __init__(self, message):
self.message = message
# raising a MeetupDayException
raise MeetupDayException("That day does not exist.")
Зареєструйтеся на Exercism, щоб вивчати й опановувати Python, а також 17 концепцій146 вправ та справжнє наставництво від людей, і все це безкоштовно.