Programmeringskurs (alle) *: 3.3 Løkker og logiske tester
Løkker og logiske tester
Det vi har sett til nå, er at vi kan traversere lister og på den måten gjøre noe med hvert av elementene i lista. Noen ganger kan det tenkes at vi ikke skal gjøre noe med alle elementene, men kun de som tilfredsstiller en eller annen betingelse. Dette kan vi løse ved å legge inn en valgsetning i løkka. La oss tenke oss at vi skal legge sammen tall i en liste, men bare ta med tallene som er positive. Med pseudokode vil det se ut som dette:
#\texttt{sum = 0}#
#\texttt{for tallet i tallene:}#
#\quad \quad \texttt{hvis tallet er større enn 0:}#
#\quad \quad \quad \quad \texttt{legg til tallet i sum}#
#\texttt{skriv ut sum}#
Lag et program som finner summen av bare de positive tallene i listen:
#\texttt{tallene = [2, 6, -5, 0, 12, 30, -20]}#
Skriv til slutt ut summen med #\texttt{print}#.
#\,#
LØSNING:
Vi kan lage programmet slik:
#\texttt{tallene = [2, 6, -5, 0, 12, 30, -20]}#
#\texttt{sum = 0}#
#\texttt{for tall in tallene:}#
#\quad \quad \texttt{if tall > 0:}#
#\quad \quad \quad \quad \texttt{sum += tall}#
#\texttt{print(sum)}#
Vi definerer en sum, og setter den til å være #\texttt{0}#. Deretter går vi gjennom lista med en løkke, og sier at for hvert tall som er i lista, skal vi øke summen med tallet, hvis tallet er større enn #\texttt{0}#.
Programmering kan være veldig nyttig for å simulere ulike praktiske situasjoner. Det skal vi se mer på i neste delkapittel, men først viser vi hvordan vi kan telle opp hvor mange ett resultat inntreffer i en liste.
La oss si at vi slår en terning 10 ganger. Vi setter opp resultatene av kastene i en liste slik:
#\texttt{kastene = [1, 4, 3, 2, 4, 6, 6, 5, 3, 2]}#
Vi ser i det neste eksempelet hvordan vi kan telle opp hvor mange firere det finnes i denne listen, og regne ut andelen firere.
Bruk en for-løkke til å telle opp hvor mange firere det er i listen nedenfor. Programmet skal skrive ut antall firere.
#\texttt{[1, 4, 3, 2, 4, 6, 6, 5, 3, 2]}#
LØSNING:
Først legger vi inn listen i koden, vi gir den navnet #\texttt{kastene}#. Så definerer en variabel #\texttt{antallFirere}# og setter denne lik null. Deretter bruker vi en #\texttt{for}#-løkke og går gjennom listen. Hvis vi møter på en 4-er i listen økes variabelen #\texttt{antallFirere}# med #\texttt{1}#. (Hvis vi møter på et annet tall, gjøres ikke noe). Til slutt skriver vi ut resultatet.
I matematikken kan vi simulere hendelser ved å la datamaskinen tilfeldig velge utfallet av småforsøk. Det er datamaskinen veldig god på, siden den jobber lynraskt. Vi skal jobbe mer med dette seinere i kapittelet. Men vi kan også kombinere manuelle forsøk og målinger med datamaskinens gode evne til å regne. Et klassisk eksempel, er å beregne sannsynligheten for å få en firer når du kaster en terning.
Vi har gjennomført et forøk med kast av terning mauelt. Resultatet av kastene har vi satt opp i denne listen:
[2,2,5,4,1,2,4,5,2,6,4,6,4,5,3,2,4,1,2,2,4,1,1,4,2,5,3,2,6]
Lag et program som teller opp antall kast og antall firere. Progammet skal også regne ut sannsynligheten for å få en firer ut fra denne listen.
LØSNING:
Først legger vi inn resultatet av alle kastene som en liste.
Så teller vi antall kast i lista ved å bruke koden
#\texttt{antallKast = len(kastene)}#
Deretter går vi gjennom listen med en #\texttt{for-}#løkke og teller opp antall firere. Antall firere blir lagret med variabelnavn #\texttt{antallFirere}#.
Til slutt finner vi sannsynligheten for å få firer ved å regne ut
#\frac{\texttt{antallFirere}}{\texttt{antallKast}}#
I vårt eksperiment, blir sjansen for å få firer 0,24. Det stemmer ikke med det forventede svaret, som burde bli #\tfrac{1}{6} = 0,167#. Det er fordi vi må trille terningen mange flere ganger for at eksperimentet skal gi oss et nøyaktig svar. Vi skal snart se hvordan vi kan simulere terningkastene med kode.