A párod minden hónapban találkozik a legjobb barátjával. Mindkettejüknek nagyon zsúfolt a naptára, így nehéz megtalálni a megfelelő dátumot! Mivel neked is zsúfolt a naptárad, a párod mindig egyeztet veled a lehetséges találkozódátumokról:
A havi telefonhívásotokban a párod ezt a kérdést tette fel neked:
Zavartan megkérdezed, mi az a „teenth” nap. A párod elmagyarázza, hogy a teenth nap, egy általa kitalált fogalom, azokra a napokra utal egy hónapban, amelyek angolul a „-teenth” végződésre végződnek:
Mivel a hétnek is hét napja van, garantált, hogy a hét minden napjára pontosan egy teenth nap esik minden hónapban.
Most, hogy érted a teenth nap fogalmát, megnézed a naptáradat. A teenth csütörtökön nincs semmi tervezett programod, így boldogan megerősíted a dátumot a pároddal.
A feladatod, hogy megtaláld egy találkozó pontos dátumát, adott hónap, év, hét napja és hét alapján.
Hat hétértéket kell figyelembe venni: first, second, third, fourth, last, teenth.
Például megkérhetnek, hogy keresd meg a találkozó dátumát 2018 januárjának első hétfőjén (2018. január 1.).
Hasonlóképpen megkérhetnek, hogy keresd meg:
A teenth hét arra a hét napra utal egy hónapban, amelyek „-teenth”-re végződnek (13., 14., 15., 16., 17., 18. és 19.).
Ha megkérnek, hogy keresd meg 1953 augusztusának teenth szombatját, megnézzük a naptárát:
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
Ebből megállapítjuk, hogy a teenth szombat 1953. augusztus 15.
Hozzáadtunk egy további hétleírót (fifth), amely a hónap ötödik hétköznapját jelöli, ha van ilyen.
Ha egy hónapban nincs ötödik hétköznap, kivételt kell dobni.
Néha szükség van arra, hogy a kódodban testre szabj és raise-elj kivételeket. Amikor ezt teszed, mindig adj meg egy beszédes hibaüzenetet, amely megmutatja, mi a hiba forrása. Ez olvashatóbbá teszi a kódodat, és sokat segít a debuggingban.
Saját kivételeket új kivételosztályok létrehozásával hozhatsz létre, amelyek jellemzően az Exception leszármazottai (további részletekért lásd a classes oldalt).
Ha tudod, hogy a hiba forrása egy adott kivételtípus leszármazottja lesz, dönthetsz úgy, hogy az Exception osztály alatti built in error types egyikétől örökölsz. A hiba dobásakor ilyenkor is adj meg beszédes üzenetet.
Ez a feladat megköveteli, hogy létrehozz egy saját kivételt, amelyet akkor kell dobni/„dobni”, amikor a meetup() függvény érvénytelen hétköznapnév- és számkombinációt kap. A tesztek csak akkor lesznek sikeresek, ha testre szabod a megfelelő kivételeket, raise-eled ezeket a kivételeket, és megfelelő hibaüzeneteket adsz meg.
Egy built-in exception testreszabásához hozz létre egy class-t, amely abból a kivételből örököl. Amikor a saját kivételt üzenettel dobod, az üzenetet a exception típus argumentumaként add meg:
# 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.")
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Python nyelvet 17 fogalom146 feladat segítségével, valódi emberi mentorálással, mindez ingyen.