Programmeringskurs (alle) *: 3.2 Løkker som går gjennom lister
For-løkke
Vi kan definere en liste ved å skrive tekst eller tall med kommaer mellom, og sette firkantparenteser rundt elementene.
#\texttt{liste = [element1, element2, element3, ...]}#
Slike lister bruker vi ofte når vi skriver kode. Det kan være varene i en nettbutikk som ligger i en liste, tall i en tallrekke eller funksjonsverdier i verditabell. Uansett innhold, ønsker vi mange ganger å gå gjennom hele lista og gjøre noe med elementene. Det kan være at vi vil vise frem alle varene i nettbutikken, eller det kan være at vi ønsker å legge sammen alle tallene i tallrekka. Dette kaller vi å traversere lista, og vi bruker gjerne en #\texttt{for}#-løkke.
En #\texttt{for}#-løkke som går gjennom en liste lager vi slik:
#\texttt{for }##\color{blue}{\texttt{element }}##\texttt{in }##\color{blue}{\texttt{liste}}##\texttt{:}#
#\quad \color{red}{\texttt{handling}}#
Vi bruker #\texttt{for-}#løkker når vi skal gjenta den samme handlingen på alle elementene i en liste.
Lag et program som definerer en liste med noen varer. Skriv ut hvert element med #\texttt{print}#.
LØSNING:
Vi kan lage programmet slik:
#\texttt{varer = ["Gulost", "Prim", "Melk"]}#
#\texttt{for vare in varer:}#
#\quad \quad \texttt{print(vare)}#
Resultatet blir slik:
Resultat:
Gulost
Prim
Melk
Varelista i eksempelet ovenfor består av tre varer. Derfor bruker vi flertallsform og kaller lista for #\texttt{varer}#. Vi går gjennom denne lista, med en #\texttt{for}#-løkke. For hver vare i lista skriver vi ut navnet på varen med #\texttt{print(vare)}#. Flertallsform (#\texttt{varer}#) på navnet til lista, og entallsform (#\texttt{vare}#) på hvert element i løkka gjør at koden blir enklere å forstå.
Lag et program som summerer tallene i en liste. Skriv til slutt ut summen med #\texttt{print}#.
LØSNING:
Vi kan lage programmet slik:
#\texttt{tallene = [2, 8, 12, 30]}#
#\texttt{sum = 0}#
#\texttt{for tall in tallene:}#
#\quad \quad \texttt{sum += tall}#
#\texttt{print("Summen er", sum)}#
Vi definerer en variabel #\texttt{sum}#, og setter den lik #\texttt{0}#. Deretter går vi gjennom lista med en #\texttt{for}#-løkke. For hvert tall som er i lista, skal vi øke summen med tallet. Vi kan forklare stegene i #\texttt{for}#-løkken slik:
- Det første tallet i lista er #\texttt{2}#, og #\texttt{0 + 2 = 2}#. Summen blir #\color{red}{\texttt{2}}#
- Det neste tallet er #\texttt{8}#. Summen blir #\color{red}{\texttt{2 }}##\texttt{+ 8 = }##\color{blue}{\texttt{10}}#
- Det neste tallet er 12. Summen blir #\color{blue}{\texttt{10 }}##\texttt{+ 12 = }##\color{brown}{\texttt{22}}#
- Det neste tallet er 30. Summen blir #\color{brown}{\texttt{22 }}##\texttt{+ 30 = 52}#
Når vi har gått gjennom alle tallene, skriver vi ut summen, som da har blitt #\texttt{52}#.
Resultatet blir slik:
Resultat:
Summen er 52
I kapittel 1 så vi at vi kunne bruke metoden #\texttt{linspace}# fra modulen pylab til å lage en liste desimaltall, jevnt fordelt fra og med en #\texttt{startverdi}# til og med en #\texttt{sluttverdi}#. Linspace fungerer slik:
#\texttt{linspace(startverdi, sluttverdi, antall)}#
Lister vi lager med #\texttt{linspace}# kan vi bruke løkker for å bearbeide.