Göm menyn

Klockor är något man kan behöva representera i sitt program. Klockor kan vara lite struliga, de har 3 olika data (timme, minut, och sekund) att hålla reda på, och i vissa falla ska dessa data slå över. Exempelvis ska klockan 23:59:59 slå över till 00:00:00 när den ökar med en sekund. Det finns också minst 2 format man vill kunna läsa av informationen från klockan på (24 timmarklocka och 12 timmarsklocka). Utöver det kan man föreställa sig problem som relaterar till exempelvis tidszoner (visste du att det finns tidszoner i världen som inte är hela timmar?)...

I denna uppgift ska vi skapa och testa en modul som representerar en klocka. Detta blir en abstrakt datatyp och vi kommer behöva välja hur vi ska representera klockslaget internt och vilket typ av gränssnitt vi ska exponera för användaren. Uppgiften presenteras här i en progression där tanken är att det ska komma nya utmaningar och att man ska tvingas refaktorera sin kod.

1: Skapa ett klockslag

I denna deluppgift är ditt jobb att välja intern representation och exponera en funktion som låter användaren skapa ett klockslag:


time1 = create("00:00:00")
print(time1)
>> [0, 0, 0]
time2 = create("23:50:01")
print(time1)
>> [23, 50, 01]
  

I exmeplet har användaren smitit runt gränssnittet för ADTn och vi kan se att ADT-programmeraren har valt att representera sitt klockslag som 3 heltal i en lista. Känn dig inte bunden till just denna representation. Du kanske vill representera klockan som ett heltal bakom kulliserna, eller en dictionary? Resonera dig fram till vad du tycker är lämpligast eller testa flera olika versioner.

Du kan göra den här deluppgiften svårare genom att lägga till felhantering för konstiga klockslag som matas in.

2: Få ut en strängrepresentation

Anledningen till att användaren smet runt gränssnittet ovan kan vara för att det inte finns ett sätt att skriva ut klockan, eller att få en representation av klockan i en sträng som de senare kan skriva ut. Skapa funktionen to_string som låter användaren få ut en strängrepresentation av klockan:


time1 = create("00:00:00")
time2 = create("23:50:01")
print(to_string(time1))
>> "00:00:00"
print(to_string(time2))
>> "23:50:01"
print(to_string(time1, am_pm=True))
>> "12:00:00 AM"
print(to_string(time2, am_pm=True))
>> "11:50:01 PM"
  

Vi ser att funktionen som skapats kan returnera klockan både som en 12-timmars klocka och en 24-timmars klocka. Detta styrs uppenbarligen genom ett default argument genom parametern am_pm till funktionen

3: Fortsätt bygga på funktionaliteten

Nu kan vi skapa ett klockslag och skriva ut det på ett smidigt sätt. Nu kan vi lägga till annan funktionalitet som är lämplig, exempelvis:

  • Öka tiden, en sekund och gången eller godtyckligt många sekunder, kanske både och?
  • Minska tiden...
  • Jämföra två klockslag (större än, mindre än, lika med)
  • Producera summan av två klockslag till ett nytt klockslag (går kanske att använda den existerande konstruktorn i samband med detta?)
  • Producera differensen av två klockslag til lett nytt klockslag

Sidansvarig: Pontus Haglund
Senast uppdaterad: 2024-08-14