Løkke
Gjentar kode (for/while) — f.eks. for å gå gjennom en liste eller lage mange objekter. Grunnlag fra IT1.
Slik kan du tenke om det
- Én runde om gangen Løkka kjører den samme kroppen om og om igjen, bare med ny verdi hver runde. Still alltid to spørsmål: hva endrer seg fra runde til runde, og hva får løkka til å stoppe? Beveger ingenting seg mot stoppen, går løkka rundt for alltid.
- Den ytre løkka venter I to løkker inni hverandre tar ikke den indre ett steg for hvert steg i den ytre — den går hele veien rundt hver gang, og først da får den ytre lov til å gå videre. Derfor ganges arbeidet i stedet for å legges sammen: tre runder ytre og fire indre gir tolv, ikke sju.
Vanlige feil
- while-løkka di stopper aldri En while-løkke gjentar så lenge betingelsen er sann. Hvis ingenting inni løkka gjør betingelsen usann (f.eks. at du glemmer å endre telleren), kjører den i det uendelige og programmet henger.
- Du endrer lista mens du løkker over den Fjerner du elementer fra en liste mens `for` går gjennom den, glir de gjenværende ett hakk fram — og løkka hopper over dem. Resultatet er at omtrent annethvert element overlever. Bygg heller en ny liste, eller løkk over en kopi med `lista[:]`.
- Du glemmer den siste gruppen etter løkka Når du samler noe opp gruppevis — like tegn på rad, en pågående serie — skrives gruppen ut først når neste element bryter mønsteret. Men den siste gruppen har ingen etterfølger som kan avslutte den. Den må skrives ut *etter* løkka, ellers forsvinner den stille.
- Du tror range tar med stoppverdien range(a, b) tar med a, men stopper FØR b. range(3) gir 0, 1, 2 — tre verdier, og 3 er ikke med. Antall verdier er b - a.
- Du tror to løkker inni hverandre tar dobbelt så lang tid Det er lett å tenke at to løkker etter hverandre og to løkker inni hverandre koster det samme — «det er jo to løkker». Men plasseringen avgjør alt. To løkker ETTER hverandre over n elementer gjør n + n = 2n arbeid (dobbelt). En løkke INNI en annen kjører den indre løkka på nytt for HVERT element i den ytre — n · n = n² arbeid. For n = 1000 er det forskjellen på 2000 og 1 000 000 operasjoner. Veksten er ikke dobbelt, men kvadratisk: dobler du n, firedobles arbeidet i den nøstede løkka.
- Du tror continue avslutter hele løkka continue hopper bare over resten av DENNE runden, og løkka fortsetter med neste element. Det er break som avslutter hele løkka. Blander du dem, tror du at alt etter det første treffet forsvinner.
Øv på dette
- Lage: summen av 1 til 100
- Lage: gangetabell
- Øving: gjett tallet
- Sjekk: hvor mange ganger?
- Sjekk: stopper løkka?
- for eller while — og programmet som henger
- Sjekk: to løkker inni hverandre
- Sjekk: break eller continue?
- Begrepssjekk: Løkker (for og while)
- Kodeløype: Løkker
- Prøvebank: Hva skrives ut? Summeløkke (nivå 1)
- Prøvebank: Hvor mange ganger? range med to argumenter (nivå 1)
- Prøvebank: Den lengste rekka på rad (nivå 2)
- Kodeløype: Arena — styr roboten
- Prøvebank: Finn feilen: koden som nesten virker (nivå 1)
- Prøvebank: Finn feilen: koden som nesten virker (nivå 2)
- Prøvebank: Finn feilen: koden som nesten virker (nivå 3)
- Drill: Python-grunnsyntaks — skriv selv (øvet)
- Drill: Python-grunnsyntaks — skriv selv (utfordring)
- Finn feilen: nedtellingen som henger
- Lage: tell dager over 20 grader