Permalänk
Medlem

[Python] Hur räkna med tid?

Jag har en uppgift från boken think python som jag har givit mig fan på att lösa. Uppgiften är som följer:

Citat:

If I leave my house at 6:52 am and run 1 mile at an easy pace (8:15 per mile), then 3 miles at tempo (7:12 per mile) and 1 mile at easy pace again, what time do I get home for breakfast?

Min fråga är då, hur adderar jag tid (Timmar, minuter, sekunder) på ett snyggt sätt?

Visa signatur

Primär - C2D T6500 :: 4GB :: Mobility 4570.
Sekundär - AMD64x2 6000+ :: 2GB :: 8800GT 1GB

Permalänk

dela upp allting i sekunder genom att multiplicera minuter med 60 och timmar med 60x60=3600

Permalänk
Medlem

om jag då dividerar med 60x60 för att hitta tillbaka till timmar får jag ju decimaler, inte minuter, inte sant?

Visa signatur

Primär - C2D T6500 :: 4GB :: Mobility 4570.
Sekundär - AMD64x2 6000+ :: 2GB :: 8800GT 1GB

Permalänk

stämmer. Så du får multiplicera 60 med första decimalen / 10 för att få fram antalet minuter..

säg att du får 7,5 som svar, det är alltså 7,5 timmar från kl 00:00 .
första decimalen är 5 och då får vi att 7,5h = 7h och 60x0,5=30min, 7h 30min. alltså kl 7:30am

Permalänk
Medlem

lysande, tack!

**EDIT**

Hur separerar jag heltalet från decimal-talet?

Visa signatur

Primär - C2D T6500 :: 4GB :: Mobility 4570.
Sekundär - AMD64x2 6000+ :: 2GB :: 8800GT 1GB

Permalänk
Medlem

f = 1.2345 heltalsdel = int(f) decimaldel = f - heltalsdel

Permalänk
Medlem

återigen tack badboll, en sista fråga bara.

Jag antar att int(variabel) heltenkelt omvandlar variabeln till en integer?

Visa signatur

Primär - C2D T6500 :: 4GB :: Mobility 4570.
Sekundär - AMD64x2 6000+ :: 2GB :: 8800GT 1GB

Permalänk
Medlem

Typ. int(flyttal) returnerar heltalsdelen av flyttalet. Medan int använt på en sträng försöker omvandla strängen till ett heltal.

>>> int("123") 123

Dock funkar inte det här:

>>> int("123.12") Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: '123.12'

Så int på ett flyttal funkar, men int på en flyttalssträng fungerar inte.

Om man definierar en egen klass, så kan man specificera vad int ska returnera om den får en instans av den klassen.

class Foo: def __int__(self): return 42 >>> f = Foo() >>> int(f) 42

Så "helt enkelt" är det kanske inte i alla fall...

Permalänk
Medlem

Vilken lysande community vi har här på SweC. Tusen tack för hjälpen!

Visa signatur

Primär - C2D T6500 :: 4GB :: Mobility 4570.
Sekundär - AMD64x2 6000+ :: 2GB :: 8800GT 1GB

Permalänk
Hedersmedlem

Om man inte främst är ute efter hur uträkningarna går till i detalj finns det också klasser för att hantera datum och tid: http://docs.python.org/library/datetime.html

Permalänk
Medlem

Är det bara jag som tycker att datum och tids-klasserna i python känns väldigt röriga och svårhanterade? Varje gång jag ska göra något som har med tid eller datum att göra får jag sitta o bläddra runt i dokumentationen jättelänge. Tex nu när jag tänkte att ja, det är klart att man borde använda datetime-modulen för det här och jag ville testa själv innan jag postade. Det tog en bra stund jämfört med vad det borde för o lista ut hur man gör något så lätt som o lägga ihop ett klockslag med två tider

Permalänk
Medlem

Datum/tid-bibliotek tenderar att vara komplexa, för datum och tid är inte helt triviala att hantera på ett korrekt sätt. Det är inget fel på datetimemodulen för Python om man jämför t.ex. med Javas Calendar. Nu är Calendar iofs ökänd för sin klumpighet, och ska bytas ut i Java 7 mot något som ska likna Joda Time (som visserligen är smidigare att jobba med, men minst (!) lika komplext som Calendar att sätta sig in i...).