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')
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?
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?
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.
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.
Hej, tack för svaren. Lite kul att negativa tider krävdes för att fastest_lap skulle fungera.
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)