Avatar billede persimonsen Nybegynder
05. juli 2010 - 17:07 Der er 14 kommentarer og
1 løsning

Regning med minutter i Python

Hejsa på forum

Da jeg har sat mig for at lære at programmere med python, er jeg ved at læse "Think Python" af Allen Downey. Bogen er på engelsk, så jeg skriver opgaven af på engelsk. men koden er min egen.
Dog lidt engelsk, hvis jeg nu skulle spørge på et engelsk forum.
Og i starten af bogen (er ikke kommet så langt), er et af spørgsmålene:

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 kode: (Dog skåret lidt ud i pap, mere for at kunne følge variabler o.l.)

start_time = 6.52*60 #antal minutter efter midnat
mile_easy_pace = 2
mile_tempo = 3
easy_pace = 8.15
tempo_pace = 7.12
run_time = (mile_easy_pace * easy_pace)+(mile_tempo * tempo_pace) #antal minutters løb
time_arrive = run_time + start_time #antal min. ankomst efter midnat
arrive = time_arrive / 60 #skulle give timer efter midnat jeg ankommer
print start_time
print run_time
print arrive
print ("Du ville ankomme til morgenmad klokken:")+ str(arrive)

Jeg får:
391.2
37.66
7.14766666667
Du ville ankomme til morgenmad klokken:7.14766666667

Hvilket ikke er korrekt ! Hvordan regner man ellers tid ud ?
Ved godt det er lavet lidt mærkeligt, men kan ikke komme på en ordentlig løsning. Syntes nemlig der er for mange variabler.
Avatar billede arne_v Ekspert
05. juli 2010 - 17:21 #1
start_time = 6.52*60 #antal minutter efter midnat

er forkert

start_time = 6*60+52 vil givet et andet tal
Avatar billede arne_v Ekspert
05. juli 2010 - 17:21 #2
run 1 mile at an easy pace

mile_easy_pace = 2

er ikke konsistent
Avatar billede arne_v Ekspert
05. juli 2010 - 17:22 #3
7.14766666667 er ikke 7:15 men lid foer - igen for minutter er 1/60 ikke 1/100
Avatar billede persimonsen Nybegynder
05. juli 2010 - 18:16 #4
Det første du skriver, der kan jeg godt se, at antal minutter bliver korrekt.

Det andet, "er ikke konsistent" ? For står jeg ikke, variablen er da tildelt. Og vedkommende løber 2 gange easy_pace.

Og den sidste, ved ikke helt hvordan jeg f.eks. kommer fra 100/1 minutter til 60/1 minutter.

BTW. Har du et forslag til en løsning, uden alle de variabler. Syntes det ser voldsomt ud, men det kan være fordi jeg ikke er så god endnu. Evt med en ting, så man kan inputte data selv,
Avatar billede persimonsen Nybegynder
05. juli 2010 - 18:18 #5
Er nemlig ikke kommet til "gets" endnu. Kan heller ikke finde det ved hurtigt at skimme bogen igennem.
Avatar billede arne_v Ekspert
06. juli 2010 - 00:44 #6
Jeg havde misset at det var to langsomme perioder.

Glem den kommentar.

Jeg prøver lige at vise noget kode.
Avatar billede arne_v Ekspert
06. juli 2010 - 00:56 #7
Forsøg:

from math import floor

def clock2minutes(t):
    return floor(t)*60 + (t - floor(t))*100

def minutes2clock(t):
    return floor(t/60) + (t/60 - floor(t/60))*60/100

start_time = clock2minutes(6.52)
mile_easy_pace = 2
mile_tempo = 3
easy_pace = 8.15
tempo_pace = 7.12
run_time = (mile_easy_pace * easy_pace) + (mile_tempo * tempo_pace)
time_arrive = run_time + start_time
arrive = minutes2clock(time_arrive)
print start_time
print run_time
print arrive
print "Du ville ankomme til morgenmad klokken: %.2f" % arrive
Avatar billede persimonsen Nybegynder
06. juli 2010 - 10:10 #8
Kan se det er noget med funktioner at gøre.
Regnede også at der måtte være en smartere måde end min.

Men er i fuld gang med funktioner, men min bog syntes jeg er lidt forvirrende, på det område. Skal lige have læst .doc om math.
Men tusind tak, for at du gider at bruge tiden på det.
Avatar billede arne_v Ekspert
06. juli 2010 - 15:37 #9
Strengt taget kan du lige saa godt lave de funktioner som inline kode
Avatar billede persimonsen Nybegynder
06. juli 2010 - 18:22 #10
Hvad mener du med 'inline kode' ?
Parenteser med variabler.
Variablerne er vel gode at have, hvis jeg leger lidt videre, og tilføjer en mulighed med at man selv kan putte data. aka sin egen regnemaskine.
Avatar billede arne_v Ekspert
06. juli 2010 - 19:09 #11
inline kode = ingen funktion
Avatar billede persimonsen Nybegynder
07. juli 2010 - 02:15 #12
Forstår ikke helt, hvordan resultatet af funktionen bliver til/brugt. Men det skal jeg lige studse mere over.

Men i 'inline kode'kan jeg ikke få det rigtige svar frem !!Øv.

Vender tilbage, når jeg lige får noget tid, ville gerne løse problemet.


Btw, ved du om,, det er mod reglerne herinde, at spørge om der er nogle der ville være med på det projekt som målet er med mit programmering. Dem der ville være med skal selvfølgelig have samme interresse, og programmet ville være de deltagenes.
I stedet for at lære det hele selv. Så dele det ud, skal nok selv lære alt det jeg kan komme af sted med, og deltage ..
Avatar billede arne_v Ekspert
07. juli 2010 - 02:33 #13
Hvordan ser koden ud når du inliner de funktioner?
Avatar billede arne_v Ekspert
07. juli 2010 - 02:34 #14
Jeg tror ikke at det er imod reglerne at samle en studiegruppe herinde.

Men du skal nok passe på med point uddeling i et sådant spørgsmål.
Avatar billede bauerdata Nybegynder
03. august 2010 - 12:32 #15
#!/usr/bin/env python
"""
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?
"""

import datetime

year, month, day, hour, minuts = 2010, 1, 1, 0, 0

point_zero  = datetime.datetime(year, month, day, hour,  minuts)
start_time  = datetime.datetime(year, month, day, 6, 52)
easy_pace  = datetime.datetime(year, month, day, hour, 8, 15) - point_zero
faster_pace = datetime.datetime(year, month, day, hour, 7, 12) - point_zero

home_at = start_time + easy_pace + 3 * faster_pace + easy_pace
print "home at", home_at
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester