Temaer gruppetime uke 12 2021
Debugging og vanlige problemer i obligen
Noen erfaringer fra retting og problemer dere har hatt:
- "Defensive programming": Sjekk output fra alle metoder/funksjoner
- Ikke gå videre før tester passer (noen hadde følgefeil fra tidlig oppgave, som ville vært oppdaget om man kjørte testene)
- Ikke vær redd for å printe ting for å se hva som skjer i koden
- Oppdeling av kode (tenk-metoden ble fort veldig stygg): Vi ser på et eksempel
git
1 min introduksjon til git (de som er interessert kan sette seg inn i git på egenhånd)
Nøstede lister, rask kode og et sidespor med numpy
Oppgave 1
Lag en funksjon lag_rutenett
som tar bredde
og hoyde
som parametere. Funksjonen skal lage et rutenett som en nøstet liste der hver sub-liste er en rad i rutenettet (raden er "bredde" lang). Hver rute inneholder enten 0 eller 1 (med 50% sannsynlighet).
Ekstraoppgave: Lag en funksjon for å skrive rutenettet til fil (velg format selv) og en funksjon for å lese fra fil (på formatet du har valgt).
Oppgave 2
Lag en funksjon antall_ikke_null(rutenett)
som tar et rutenett og returnerer antallet ruter som ikke er 0.
Ektraoppgave: Lag også en funksjon gjennomsnitt(rutenett)
som finner gjennomsnittet.
Ekstraoppgave 2: Anta at du vil ha flere funksjoner som gjør ting med et rutenett (printer det f. eks), ser du da noen ryddigere måte å strukturere koden din på ?
Oppgave 3
Kall funksjonen antall_ikke_null
10000 ganger med samme rutenett som er 1000x1000 stort. Hvor lang tid tar alle disse kallene? Klarer du å skrive kode som gjør at det går raskere?
Du kan time koden slik:
import time
rutenett = lag_rutenett(1000, 1000)
start_tid = time.time()
# gjør ting
slutt_tid = time.time()
print("Tid det tok:", slutt_tid-start_tid)
Oppgave 4:
Vi gjør dette med numpy i stedet.
Hvilken annen fordel tror dere numpy har i tillegg til å være raskere?