13 svar
478 visningar
wilda är nöjd med hjälpen
wilda 19 – Fd. Medlem
Postad: 6 apr 2017 14:20

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.

Affe Jkpg 6630
Postad: 6 apr 2017 18:49

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

Henrik Eriksson 1405 – Fd. Medlem
Postad: 6 apr 2017 18:52

Det kan väl inte kosta 10 kr/s?

sekund+60*minut+3600*timme blir antal sekunder efter midnatt.

Affe Jkpg 6630
Postad: 6 apr 2017 18:56
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 

wilda 19 – Fd. Medlem
Postad: 6 apr 2017 18:57

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

Henrik Eriksson 1405 – Fd. Medlem
Postad: 6 apr 2017 19:13

Aha, ja där skulle inte jag parkera ... Förstår du nu hur du ska beräkna priset?

wilda 19 – Fd. Medlem
Postad: 6 apr 2017 19:49

Det svåra är att koden ska ta datorns tid. Så jag kan inte räkna efter midnat

Henrik Eriksson 1405 – Fd. Medlem
Postad: 6 apr 2017 20:55

Datorn räknar tiden i sekunder sedan 1 jan 1970. Anropet time.time ger detta.

Affe Jkpg 6630
Postad: 6 apr 2017 22:03 Redigerad: 6 apr 2017 22:08
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"

liyunyun 53 – Avstängd
Postad: 7 apr 2017 07:43 Redigerad: 7 apr 2017 09:37

Bortredigerat inlägg. Regelbrott 3.1. /Kajsa, admin

wilda 19 – Fd. Medlem
Postad: 7 apr 2017 14:16

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

PeterÅ 842
Postad: 7 apr 2017 15:49 Redigerad: 7 apr 2017 16:42

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)

Affe Jkpg 6630
Postad: 7 apr 2017 18:06

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ö.

wilda 19 – Fd. Medlem
Postad: 8 apr 2017 11:29

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 :)

Svara Avbryt
Close