Зустріч

Зустріч

Середня

Вступ

Щомісяця наш партнер зустрічається зі своїм найкращим другом. У них обох дуже щільний графік, тож знайти слушну дату непросто! А оскільки графік щільний і в нас, партнер завжди уточнює можливі дати зустрічі з нами:

  • «Можемо зустрітися першої пʼятниці наступного місяця?»
  • «А як щодо третьої середи?»
  • «Може, останньої неділі?»

Під час дзвінка цього місяця партнер запитує нас:

  • «Хотілося б зустрітися в надцятий четвер, гаразд?»

Спантеличені, ми питаємо, що таке надцятий день. Партнер пояснює, що надцятий день - це вигадане поняття, яке означає дні місяця, що закінчуються на «-надцяте»:

  • 13-те (тринадцяте)
  • 14-те (чотирнадцяте)
  • 15-те (пʼятнадцяте)
  • 16-те (шістнадцяте)
  • 17-те (сімнадцяте)
  • 18-те (вісімнадцяте)
  • 19-те (девʼятнадцяте)

Оскільки днів тижня теж сім, кожен день тижня гарантовано має рівно один надцятий день щомісяця.

Тепер, коли ми розуміємо, що таке надцятий день, ми перевіряємо свій календар. На надцятий четвер у нас нічого не заплановано, тож ми радо підтверджуємо дату партнерові.

Вказівки

Знайдіть точну дату зустрічі, знаючи місяць, рік, день тижня та тиждень.

Є шість значень тижня: first, second, third, fourth, last, teenth.

Наприклад, може знадобитися знайти дату зустрічі на перший понеділок січня 2018 року (1 січня 2018 року).

Так само може знадобитися знайти:

  • третій вівторок серпня 2019 року (20 серпня 2019 року)
  • teenth-середу травня 2020 року (13 травня 2020 року)
  • четверту неділю липня 2021 року (25 липня 2021 року)
  • останній четвер листопада 2022 року (24 листопада 2022 року)
  • teenth-суботу серпня 1953 року (15 серпня 1953 року)

Тиждень teenth

Тиждень 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 року.

Як цю вправу побудовано в Python

Ми додали додатковий дескриптор тижня (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.")

Джерело

Джеремі Гайнеґарднер згадав про зустріч у Боулдері, що відбувається на «Wednesteenth» кожного місяця
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Python Exercism

Час розпочати Зустріч?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Python, а також 17 концепцій146 вправ та справжнє наставництво від людей, і все це безкоштовно.