Gevorderde Python-ontwikkelingscursus
Hoofdstuk
>
Niveau
String en Tijdmodules
Kalendermodule
Doel
Controleer de kalender en stel data in voor enkele leveringsschema's met behulp van de Calendar-module.
Er zijn verschillende zendingen aangekomen en roosters die nageleefd moeten worden zodat ze rond de bouw van de nieuwe boerderij verdeeld kunnen worden. Voorheen gebruikten we de date module om verzendetiketten in te stellen, maar hier gaan we roosters instellen met behulp van de calendar-module. Om gebruik te maken van de klassen en functies van de module gebruik je import calendar om alle relevante materialen te importeren.
Voor onze doeleinden gebruiken we de volgende functies van de calendar-module:
calendar.calendar():Toont de volledige kalender voor het jaar, neemt één (1) argument, namelijk het jaar dat je wilt weergeven.calendar.month():Toont een kalender voor een enkele maand, neemt twee (2) argumenten, het jaar en de maand.calendar.isleap():Controleert of een jaar een schrikkeljaar is, neemt één (1) argument, namelijk het jaar dat gecontroleerd moet worden.calendar.leapdays():Berekent het aantal schrikkeldagen dat zich heeft opgeteld over de jaren, neemt twee (2) argumenten, namelijk de jaren die de periode beslaan die je wilt controleren.itermonthdays():Gebruikt deCalendar()-klasse, doorloopt alle dagen van de maand, neemt twee argumenten, het jaar en de maand.itermonthdates():Gebruikt deCalendar()-klasse, doorloopt alle datums in de maand, neemt twee argumenten, het jaar en de maand.monthdayscalendar():Gebruikt deCalendar()-klasse, doorloopt alle weken in de maand, neemt twee argumenten, het jaar en de maand. Slaat de gegevens op in een geneste lijst.monthdays2calendar():Hetzelfde als de vorige functie, maar slaat de weken en dagen samen op in een tweedimensionale lijst.
Om te beginnen, ga naar het gouden X-teken en controleer de kalender, maak een variabele genaamd cal en sla de waarde van calendar.calendar() op en voeg het jaar 2026 als argument toe, zoals dit: cal = calendar.calendar(2026). Gebruik de display()-functie om de cal-variabele die je zojuist hebt ingesteld weer te geven.
Nadat je de kalender hebt gecontroleerd en weergegeven, ga naar het lichte X-teken en controleer de spreadsheet op het bureau. Gebruik de read()-functie om de memo te bekijken voor de ingeplande maand van de levering. Maak twee variabelen, één genaamd year en één genaamd month, en vul deze met de informatie die je hebt gelezen.
Maak een variabele genaamd calendar_month en sla de waarde van de functie calendar.month() op, waarbij je de variabelen year en month als argumenten gebruikt. Gebruik de display()-functie om de kalendermaand weer te geven, die gebruikt zal worden om de distributierosters in te stellen.
Ga naar het donkere X-teken op het groene tapijt, hier gaan we een aantal gegevens opschrijven om ervoor te zorgen dat de roosters niet verschoven worden. Maak twee variabelen, één genaamd leap_year en één genaamd leap_days. Voor de variabele leap_year sla je het resultaat van calendar.isleap() op en stel je 2026 in als argument. Hierdoor kun je verifiëren of het huidige projectjaar een schrikkeljaar is. Voor de variabele leap_days sla je de waarde van calendar.leapdays() op en voeg je de waarden 2020 en 2027 toe als argumenten. Dit verifieert de hoeveelheid schrikkeldagen die zich gedurende de gehele projectduur hebben voorgedaan. Gebruik de vooraf geschreven write()-functie en voeg leap_year en leap_days toe om de gegevens te noteren.
Ga naar het donkere X-teken op het rode tapijt en richt je op het bureau, hier zullen we de planning van de maand opstellen. Maak een variabele genaamd date en sla de waarde van calendar.Calendar() op, dit maakt een klasseobject dat we later kunnen gebruiken als referentie. Maak een andere variabele genaamd day_roster en voeg een lege string toe, dit stelt ons in staat om de dagenrooster als een string op te slaan. Zo: day_roster = "".
Er staat vooraf geschreven in de editor een for-lus die door de kalender itereert en de datums opsomt. Gebruik de functie itermonthdays() en voeg de variabelen year en month die je eerder hebt aangemaakt als argumenten toe. Voeg de ontbrekende items toe indien nodig om de totaaltelling van het rooster op te bouwen.
for day in dates.itermonthdays(-insert value-, -insert value-): entry = "Day: %s \n" % (day) day_roster += entry
Zodra de lus is ingesteld, maak je een duplicaat van deze lus, maar vervang je de functie itermonthdays() door itermonthdates() en voeg je de variabelen year en month als argumenten toe. Laat voor de variabele entry de data op de volgende manier registreren: entry = "%s \n" % (day). Hiermee krijgen we de volledige datums van de projectduur. Gebruik de vooraf geschreven display()-functie met de variabele day_roster om het volledige rooster van projectdagen in de kalender weer te geven.
Ga naar het donkere X-teken op het blauwe tapijt en richt je op de memo, hier gaan we de opvolgingsweken van het project, gecatalogiseerd in lijsten, instellen. Maak een variabele genaamd weeks en sla de waarde van calendar.Calendar() op, dit maakt een klasseobject dat we met de functies kunnen aanspreken. Neem de variabele month en vervang de waarde door 7 om het rooster waarmee we werken aan te passen, zoals dit: month = 7.
Maak een variabele genaamd week_roster en voeg een lege string toe, dit stelt ons in staat om het rooster van weken als een string op te slaan. Zo: week_roster = "". Er staat vooraf geschreven in de editor een for-lus die door de kalender itereert en de weekdagen opsomt. Gebruik de functie monthdayscalendar() en voeg de variabelen year en month die je eerder hebt aangemaakt als argumenten toe. Voeg de ontbrekende items toe indien nodig om de totaaltelling van het rooster op te bouwen.
for day in weeks.monthdayscalendar(-insert value-, -insert value-): entry = "%s \n" % (day) week_roster += entry
Zodra de lus is ingesteld, maak je een duplicaat van deze lus, maar vervang je de functie monthdayscalendar() door monthdays2calendar() en voeg je de variabelen year en month als argumenten toe. Hiermee krijgen we de volledige datums van de projectduur. Gebruik de vooraf geschreven display()-functie met de variabele week_roster om het volledige rooster van de projectweekdagen in de kalender weer te geven, zodat het level voltooid kan worden.