Chaque mois, ta partenaire retrouve son meilleur ami. Comme tous les deux ont un emploi du temps très chargé, ce n'est pas facile de trouver une date qui leur convienne ! Et comme ton emploi du temps est lui aussi bien rempli, ta partenaire vérifie toujours avec toi les dates de rencontre envisagées :
Lors de l'appel de ce mois-ci, ta partenaire t'a posé cette question :
Perplexe, tu lui demandes ce qu'est un jour teenth. Ta partenaire t'explique qu'un jour teenth, un concept qu'elle a inventé, désigne les jours du mois qui se terminent par -teenth :
Comme il y a aussi sept jours dans la semaine, chaque jour de la semaine a exactement un jour teenth par mois.
Maintenant que tu as compris le concept de jour teenth, tu consultes ton calendrier. Tu n'as rien de prévu le jeudi teenth, alors tu confirmes joyeusement la date avec ta partenaire.
Ta tâche consiste à trouver la date exacte d'un meetup, à partir d'un mois, d'une année, d'un jour de la semaine et d'une semaine.
Il y a six valeurs de semaine à prendre en compte : first, second, third, fourth, last, teenth.
Par exemple, on peut te demander de trouver la date du meetup du premier lundi de janvier 2018 (1er janvier 2018).
De même, on peut te demander de trouver :
La semaine teenth désigne les sept jours d'un mois dont le nom se termine par « -teenth » (13, 14, 15, 16, 17, 18 et 19).
Si l'on te demande de trouver le samedi teenth d'août 1953, on consulte son calendrier :
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
On en déduit que le samedi teenth est le 15 août 1953.
On a ajouté un descripteur de semaine supplémentaire (fifth) pour le cinquième jour de la semaine du mois, s'il existe.
S'il n'y a pas de cinquième jour de la semaine dans un mois, tu dois lever une exception.
Il est parfois nécessaire à la fois de personnaliser et de raise des exceptions dans ton code. Quand tu le fais, tu dois toujours inclure un message d'erreur explicite pour indiquer l'origine de l'erreur. Cela rend le code plus lisible et facilite grandement le débogage.
On peut créer des exceptions personnalisées à l'aide de nouvelles classes d'exception (voir classes pour plus de détails) qui sont généralement des sous-classes de Exception.
Dans les cas où tu sais que la source de l'erreur dérivera d'un certain type d'exception, tu peux choisir d'hériter de l'un des built in error types sous la classe Exception. Quand tu lèves l'erreur, tu dois quand même inclure un message explicite.
Cet exercice en particulier te demande de créer une exception personnalisée à lever/« lancer » lorsque la fonction meetup() reçoit une combinaison de nom de jour et de nombre qui n'est pas valide. Les tests ne passeront que si tu personnalises les exceptions appropriées, que tu lèves ces exceptions avec raise et que tu inclus des messages d'erreur appropriés.
Pour personnaliser une built-in exception, crée une class qui hérite de cette exception. Quand tu lèves l'exception personnalisée avec un message, écris ce message comme argument du type 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.")
Inscris-toi sur Exercism pour apprendre et maîtriser Python avec 17 concepts146 exercices, et un vrai mentorat humain, le tout gratuitement.