Opdracht 36 Verjaardag¶
Als laatste meesterproef maken we een programma dat onze komende
verjaardagen berekent. Je zult hierbij gebruik maken van een module die
we nog niet eerder behandeld hebben, namelijk de datetime
module.
Met de datetime
module kun je verschillende soorten objecten
gebruiken, bijvoorbeeld objecten van het type:datetime.time
voor het
bijhouden van een tijdstip datetime.date
voor het bijhouden van een
datum datetime.datetime
voor het bijhouden van een tijdstip op een
bepaalde datum.
Voor het bijhouden van een verjaardag kunnen we goed gebruik maken van
een datetime.date
object. Je zult je voor het uitvoeren van deze
opdracht moeten verdiepen in de werking van dit object en de
bijbehorende methods. Zoek daarom eerst online naar de documentatie!
Het te schrijven programma vraagt allereerst je geboortedatum en vraagt daarna, hoeveel komende verjaardagen je wilt berekenen.
Het programma geeft vervolgens voor het huidige jaar, en de komende jaren, aan hoe oud je wordt en op welke dag van de Les je verjaardag valt.
Stappenplan¶
-
Schrijf een functie get_date. Aan deze functie wordt een string als argument meegegeven. Bij aanroepen van de functie toont de functie de meegegeven string als prompt en vervolgens moet de gebruiker een string invoeren.
-
Ervan uitgaande dat de ingevoerde string een geldige datum is, bevat deze drie cijfers, gescheiden door een liggend streepje, -. Het eerste cijfer is de dag, dan de maand en dan het jaar. Je kunt dus een method gebruiken om de string op te splitsen in een lijst met drie elementen: dag, maand en jaar.
-
Met de elementen van je lijst als argumenten, kun je nu een nieuw datetime.date object aanmaken, dat de geboortedatum bevat.
-
De functie geeft dit datetime.date object terug als return value.
-
Test je functie voordat je verdergaat, door deze aan te roepen en het resultaat af te drukken.
-
Als alles werkt, ga je verder. Vraag de gebruiker hoeveel verjaardagen deze wil berekenen.
-
Maak nu een nieuw datetime.date object met de huidige (systeem) datum. Je kunt vervolgens verschillende eigenschappen van je nieuwe object opvragen, waaronder het jaar.
-
Bereken, op basis van het huidige jaar en het geboortejaar, hoe oud de gebruiker dit jaar wordt.
-
Bepaal op welke Lesdag dit jaar de verjaardag valt. Hint: maak eerst een nieuw datetime.date object met als datum de verjaardag in het betreffende jaar. Deze datum kun je vervolgens precies zo afdrukken als gewenst met de methode
.strftime()
. -
Als dit allemaal goed gaat, herhaal dit dan voor de komende jaren.
-
Als laatste kun je je functie
get_date
uitbreiden met een aantal extra controles:- bevat de ingevoerde string inderdaad precies twee liggende streepjes (-)?
- bestaan de drie substrings met datum, maand en jaar uit alleen maar decimale cijfers?
- ligt de dag wel tussen 1 en 31, de maand tussen 1 en 12 en het jaar tussen (zeg) 1900 en 2100?
- andere controles die je nog kunt bedenken?
Zo niet, geef dan een foutmelding en vraag de gebruiker opnieuw om input.
-
Voldoet je programma aan de code conventions?
Voorbeeld input en output¶
Hieronder een voorbeeld van input/output van de applicatie bij geen succes. Input die de gebruiker invoert is schuin en vetgedrukt.
- Enter your date of birth (dd-mm-yyyy): 1-13-1990
- Incorrect input, please try again
- Enter your date of birth (dd-mm-yyyy): 1-12-1990
- Calculate how many birthdays? 3
- This year you will be 29 years old.
- Your birthday will be on a Sunday .
- In 2020 you will be 30 years old.
- Your birthday will be on a Tuesday .
- In 2021 you will be 31 years old.
- Your birthday will be on a Wednesday .