6 svar
114 visningar
KaffeUtanMjolk behöver inte mer hjälp
KaffeUtanMjolk 22
Postad: 23 sep 11:55

LapTimes-uppgift

Hej, försökte lösa en uppgift i boken. Variablerna average_time samt slowest_lap fungerar, men inte fastest_lap. 

 

Vad har gjorts fel??

lap_amount = int(input('How many laps have you ran: '))
total_time = 0
slowest_lap = 0
fastest_lap = 0
time1 = 0
time2 = 0

for laps in range(1, lap_amount + 1):
    time = float(input(f'How long time did it take to run lap {laps}: '))
    total_time += time

    if slowest_lap < time:
        slowest_lap = time
    if fastest_lap > time:
        fastest_lap = time

average_time = total_time / (lap_amount)

if laps == 0:
    slowest_lap = fastest_lap = time


print('Scoreboard:\t')
print(f'The slowest lap took {slowest_lap} seconds')
print(f'The fastest lap took {fastest_lap} seconds')
print(f'The average lap took {average_time} seconds')
sictransit 1084 – Livehjälpare
Postad: 23 sep 12:18 Redigerad: 23 sep 12:29

fastest_lap är =0 från början och sedan kontrollerar du om det är större än det inmatade värdet. Kommer det att inträffa för icke-negativa tider?

CurtJ 1201
Postad: 23 sep 13:49 Redigerad: 23 sep 13:52

Du bör också titta på villkoren.  Vilken tid ska va mindre resp större för att du ska uppdatera minsta resp största tid?

 

sictransit 1084 – Livehjälpare
Postad: 23 sep 13:51 Redigerad: 23 sep 13:58

Det är nyttigt att koda ihop precis det du felsöker med if-satser, så rätta buggarna du har i koden. (Både det du frågade om, samt kanske vad slowest_lap skall ha för värde initialt.)

Därefter kan du kika på funktionerna min() och max(), som gör livet enklare och koden lättare att läsa.

Samo 12
Postad: 24 sep 18:43 Redigerad: 24 sep 18:45

Problemet är att både slowest_lap och fastest_lap börjar med 0. Time kan ju realistiskt aldrig vara mindre än 0 så den if satsen kommer aldrig att vara sann. Ett sätt att lösa detta skulle vara att sätta slowest_lap och fastest_lap lika med time oavsett storlek på det första lapet.

Så här hade jag ändrat på for loopen för att fixa koden:

 

for laps in range(1, lap_amount + 1):
    time = float(input(f'How long time did it take to run lap {laps}: '))
    total_time += time

    if laps == 1:
        slowest_lap = time
        fastest_lap = time
    elif slowest_lap < time:
        slowest_lap = time
    elif fastest_lap > time:
        fastest_lap = time

 

För övrigt ser jag ingen anledning att definiera variablerna time1 och time2.

Jag förstår inte heller vad poängen med den här if satsen är:

if laps == 0:
    slowest_lap = fastest_lap = time

Den kommer ju inte göra något då den är utanför for loopen och även om den var innanför for loopen så är laps aldrig 0.



KaffeUtanMjolk 22
Postad: 24 sep 19:10

Hej, tack för svaren. Lite kul att negativa tider krävdes för att fastest_lap skulle  fungera.

sictransit 1084 – Livehjälpare
Postad: 24 sep 19:13 Redigerad: 24 sep 19:14

Ett vanligt mönster när man har en max/min-någonting man vill hålla koll på är att sätta värdena till ett helt orimligt "worst case" initialt.

I ditt fall skulle slowest_lap kunna vara -1000 och fastest_lap vara +1000.

Annars tycker jag det var elegant att sätta dem rakt av utan jämförelse på första varvet.

Vill man helt slippa villkor så fungerar det här:

fastest_lap = min(fastest_lap, time)
slowest_lap = max(slowest_lap, time)
Svara
Close