Trädvy Permalänk
Medlem
Plats
Karlskoga
Registrerad
Jul 2009

[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?

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

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jul 2007

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

Trädvy Permalänk
Medlem
Plats
Karlskoga
Registrerad
Jul 2009

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

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

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jul 2007

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

Trädvy Permalänk
Medlem
Plats
Karlskoga
Registrerad
Jul 2009

lysande, tack!

**EDIT**

Hur separerar jag heltalet från decimal-talet?

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

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Mar 2008

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

Trädvy Permalänk
Medlem
Plats
Karlskoga
Registrerad
Jul 2009

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

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

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

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Mar 2008

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

Trädvy Permalänk
Medlem
Plats
Karlskoga
Registrerad
Jul 2009

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

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

Trädvy Permalänk
Hedersmedlem
Plats
Linköping
Registrerad
Apr 2004

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

Trädvy Permalänk
Medlem
Plats
Sthlm
Registrerad
Okt 2001

Ä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

AK47s for everyone! - Angry mob
Since NaN /= NaN, I think, we should decipher 'NaN' as 'Not a NaN' - Miguel Mitrofanov
(Varför är människan så benägen att tro på Gud?) Antagligen har det lönat sig och evolutionen har drivit fram sådana hjärnor. - Anon

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Mar 2008

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