Beräkna kostnaden
Hej.
Har en uppgift då jag ska göra programmet till ett parkeringshus och kör fast på delen när man ska ta betalt utfrån hur länge man har stått. Eftersom det inte ska ta så lång tid att köra programmet ska det kosta 10 kr per sekund.
Jag kommer att få tidsangivelser från datorns inbyggda klocka när bilar kör in och ut ur parkeringshuset (redan löst). Jag har valt att spara dem som kopplat till kundens konto (self):
self.ankomsttid_timme
self.ankomsttid_minut
self.ankomsttid_sekund
self.avgångstid_timme
self.avgångstid_minut
self.avgångstid_sekund
Mitt stora problem är hur jag matematiskt ska lösa det för att få totala antal sekunder man har befunnit sig i parkeringshuset att bli rätt. Det går ju bra så länge man inte byter minut eller ännu värre timme eftersom tiden baseras på 60-system och Pythons matematik baseras på 10-system.
Jag har själv tillämpat att datorn har en klocka som räknar sekunder från 1970. Om du kan komma på hur du hämtar tid på det formatet behöver du bara:
self.ankomsttid
self.avgångstid
All lagring av tid kan du göra i detta tidsformat och det fungerar universellt för alla tidsmarkerade händelser. Vid presentation av tidsmarkerade händelserna väljer du sedan presentationssätt. Det finns hur många sätt som helst att presentera tid :-)
Om du vill göra en förenklad tillämpning av tankesättet, kan du räkna sekunder från t.ex. klockan 00:00
Det kan väl inte kosta 10 kr/s?
sekund+60*minut+3600*timme blir antal sekunder efter midnatt.
Henrik Eriksson skrev :Det kan väl inte kosta 10 kr/s?
sekund+60*minut+3600*timme blir antal sekunder efter midnatt.
Jo, Henrik, när man provar eller presenterar sin programvara vill man skala "tidsaxeln". Därav 10kr/s
Det är en stimulering. Tanken är att läraren snabbt ska kunna göra kolla om det fungerar genom att gå in i parkeringshuset och ut typ 5 sek senare
Aha, ja där skulle inte jag parkera ... Förstår du nu hur du ska beräkna priset?
Det svåra är att koden ska ta datorns tid. Så jag kan inte räkna efter midnat
Datorn räknar tiden i sekunder sedan 1 jan 1970. Anropet time.time ger detta.
Henrik Eriksson skrev :Datorn räknar tiden i sekunder sedan 1 jan 1970. Anropet time.time ger detta.
Utmärkt! Vanligtvis finns det sedan biblioteks-rutiner som packar upp sekunderna i år-månad-dag-timme-minut-sekund. Annars är det inte så svårt att bygga dom själv :-)
Alla beräkningar gör man enklast i "sekundformatet"
Bortredigerat inlägg. Regelbrott 3.1. /Kajsa, admin
Tack för hjälpen, lösete det med detta:
from datetime import datetime
...
s1 = '07 April 2017 13:38:26'
s2 = '07 April 2017 13:38:47' # for example
FMT = "%d %B %Y %H:%M:%S"
tdelta = datetime.strptime(s2, FMT) - datetime.strptime(s1, FMT)
return tdelta.total_seconds()
Men det är ett problem till. Parkeringshuset har valt att avrunda upp alla parkeringstider till närmast halvtimme för enkelhets skull. Anta att varje sekund som passerat motsvarar tio minuters parkeringstid.
Delen med 10 att en sekund är 10 minuter är lätt och jag löste den genom att ta gånger 10. Men kan programmet avrunda uppåt på något sätt? Eller hur skulle man kunna lösa det? Tänker ngn form av modulo men det känns väldigt överkurs
Varje sekund motsvarar 10 minuter. Du vill avrunda uppåt till 30 minuter som då motsvarar 3 sekunder:
AvrundadParkeringstid och Parkeringstid är tiden i sekunder.
AvrundadParkeringstid = Parkeringstid + (3 - (Parkeringstid mod 3))
... ger dig antal sekunders parkering avrundad med 3 uppåt (3, 6 ,9 osv)
En dator som arbetar med en variabel som är deklarerad som ett heltal, kastar typiskt resultat som innehåller decimaldelar. Det kallas även för trunkering. Ett vanligt design-mönster (design pattern) för programmering kan därför se ut så här:
tid=(tid+3)/3*3
Du kan enkelt prova om något motsvarande fungerar i din programmerings-miljö.
tack så mycket för hjälpen. Jag håller på med python och tänker att jag ska kolla på det som har med modulo att göra :)