In onze contreien wordt vrijdag de dertiende algemeen als een ongeluksdag aanzien. Het is niet echt geweten waar dit bijgeloof vandaan komt, en ondanks het feit dat er allerlei verklaringen te vinden zijn in verschillende godsdiensten en gebruiken, lijkt het er op dat dit bijgeloof nog maar hooguit een dikke 100 jaar oud is.
Ook de combinatie van de weekdag vrijdag en het getal dertien is niet zo universeel als je misschien wel zou denken. In ondere andere Belgiƫ, Nederland en Engeland wordt inderdaad vrijdag de dertiende als ongeluksdag gezien. In Griekenland, Spanje en Latijns-Amerika is het echter dinsdag de dertiende die een ongeluksdag zou moeten zijn. In Italiƫ is iedereen dan weer extra voorzichtig op vrijdag de zeventiende.
Schrijf een functie ongeluksdagen waaraan een startdatum (datetime.date) moet doorgegeven worden. Daarnaast kunnen optioneel nog drie bijkomende argumenten aan de functie doorgegeven worden, die respectievelijk een einddatum (datetime.date), een dagnummer (int) en een weekdagnummer (int) aanduiden. De functie moet als resultaat het aantal dagen (int) tussen de begindatum en de einddatum (grenzen inbegrepen) teruggeven die op de gegeven weekdag vallen. Als enkel het verplichte argument wordt meegegeven, wordt het aantal vrijdag de dertiende tussen de begindatum en vandaag berekend. Indien de begindatum recenter is dan de einddatum, dan liggen er geen dagen tussen de begindatum en de einddatum, en moet de functie logischerwijs de waarde 0 als resultaat teruggeven.
In deze opgave moet je gebruikmaken van de gegevenstypes date en timedelta die gedefinieerd worden in de module datetime van de Python Standard Library1. Voor je aan de eigenlijke opgave begint, kan je best eerst nagaan hoe Python reageert als je achtereenvolgens de volgende instructies uitvoert binnen een interactieve Python sessie:
>>> from datetime import date
>>> geboortedatum = date(1983, 1, 14)
>>> d = date.today() - geboortedatum
>>> type(d)
>>> d.days
>>> from datetime import timedelta
>>> geboortedatum + timedelta(1)
>>> dag1 = geboortedatum + timedelta(1)
>>> dag1
>>> dag2 = dag1 + timedelta(1)
>>> dag2
>>> vandaag = date.today()
>>> vandaag
>>> vandaag.weekday()
>>> morgen = vandaag + timedelta(1)
>>> morgen.weekday()
>>> morgen.day
Zorg er zeker voor dat je begrijpt waarom de verschillende resultaten gegenereerd worden.
>>> from datetime import date >>> ongeluksdagen(date(2012, 1, 1), date(2012, 12, 31)) 3 >>> ongeluksdagen(date(2012, 1, 1), date(2012, 12, 31), 14, 5) 3 >>> ongeluksdagen(date(2012, 1, 1), date(2012, 12, 31), 17, 4) 2 >>> ongeluksdagen(date(2012, 1, 1), date(2012, 12, 31), 13, 1) 2 >>> ongeluksdagen(startdatum=date(2012, 1, 1), dag=1, weekdag=0, einddatum=date(2012, 12, 31)) 1