Løkker

Når man programmerer har man ofte brug for at programmet undersøger noget igen og igen. Hertil anvender man løkker. Python anvender to typer løkker: for og while

Type Anvendes når ... Beskrivelse
for Man kender antal gennemløb for-løkken anvendes når man ved hvor mange gange den skal gøre. Det kan f.eks. være at vi gerne vil have at den kører 10 gange, eller lige så mange gange der er tegn i en tekststreng
while Man ikke kender antal gennemløb while-løkken anvendes når vi ikke ved hvornår løkken skal stoppe. Det kan f.eks. være når resultatet overstiger en værdi, eller inde for en tidsramme.

Før vi når til løkkerne skal vi lærer om Operatorer og Væktstal.

Operatorer

For at sætte betingelserne anvendes der operatorer. Operatorerne er angivet i nedestående skema.

Operator Beskrivelse Eksempel
> større end 5 > 8 → falsk
< mindre end 5 < 8 → sand
>= Større end eller lig med 5 >= 8 → falsk
<= Mindre end eller lig med 5 <= 8 → sand
== Lig med 5 == 8 → falsk
!= Ikke lig med 5 != 8 → sand
x and y Både x og y skal være sand x=6 ; y=3

(x < 10 and y > 1) → sand
x or y Kun en behøver at være sand x=6 ; y=3

(x == 6 or y == 1) → sand

I matematik er vi vant til at kunne beskrive intervaller på ved hjælp af udsagn som dette: 3 ≤ x ≤ 7 , men når man programmerer skal man "skille" udsagnet ad, så det bliver: 3<=x and 7<=x

Vækst

Ofte har man brug for at en variabel vokser eller aftager med en konstant eller en faktor. Eksemplet i tabellen tager udgangspunkt i at a = 8.

Operator Beskrivelse Eksempel (a=8) Ny værdi
*tæller* += *konstant* vokser med a += 2 10
*tæller* -= *konstant* formindskes med a -= 2 6
*tæller* *= *konstant* ganges med a *= 2 16
*tæller* /= *Konstant* divideres med a /= 2 4

Indrykninger

Når man skriver kode i Python som er betinget af noget, så gør man det ved at rykke den betingede under betingelsen. Det gør man enten ved at bruge 4xMellemrum eller Tab. Når Python registrerer at der er skrevet en betingelse så sættes der 3 punktummer (...). Det er efter disse punktummer man rykker den næste kodelinie ind. Læg også mærke til at der er kolon (:) efter hver betingelse. Det er dette tegn der fortæller Python at der kommer kode herunder der er afhængig af betingelsen.

Når man er færdig med at skrive sin kode trykker man Enter 2 gange og koden udføres. Generelt ser koden ud som herunder:

*udsagn_1*:

...    *kode der skal køres når udsagn_1 er sandt*
    
*udsagn_2*:

...    *kode der skal køres når udsagn_2 er sandt*

Man kan også indsætte udsagn i udsagn:

*udsagn_a*:

...    *kode der skal køres*
    
...    *udsagn_b*:

...        *kode der skal køres hvis udsagn_b er sandt*

for - løkker

for-løkken køres når man kender antallet af gange en kode skal køre. Funktionen anvendes på følgende måde:

for *tæller* in range(*startværdi*, *slutværdi*, spring*):

I dette materiale anvender jeg i som tælleren. Man anvender i som standard fordi det er første bogstav i heltalsbegrebet man anvender i programmering: integer

Herunder er nogle eksempler hvor nogle funktioner køres et bestemt antal gange. Herunder printes de første 5 værdier af i. Læg mærke til at Python tæller fra værdien 0 og så 5 værdier frem.

>>> for i in range(5):
...    print(i)
...	
0
1
2
3
4

Denne funktion kan f.eks. anvendes til at skrive de første 5 kvadrattal. For at i starter med være en sætter sætter jeg både start- og slutværdi på range. Den går fra 1 til 6 for at jeg får 5 værdier, da den 6. værdi ikke er med.

>>> for i in range(1,6):
...    print(pow(i,2))
...
1
4
9
16
25

Man kan også få den til at springe i værdierne. Herunder udskriver jeg de lige tal i intervallet 1-10. Jeg definerer den første og den sidste værdi og til sidst hvor meget den skal springe pr. gang.

>>> for i in range(2,11,2):
...    print(i)
...
2
4
6
8
10

Når man anvender for løkker skal man definere talområdet meget præcist. Det er både det som er fordelen og udfordringen ved at anvende for-løkker.

Tæl baglæns

For at tælle baglæns anvendes reversed()

>>> for i in reversed(range(1,6)):
...    print(i)
...
5 
4
3
2
1

while-løkker

Når man anvender while-løkker, så skal man selv sætte udgangspunktet for betingelsen og selve betingelsen op.

while-løkken køres når man ikke kender antallet af gange en kode skal køre. Funktionen anvendes på følgende måde:

while *betingelse*:

Koden er forklaret med rødt.

>>> i=0 --> variablen i sættes til 0
>>> while i<5: --> Så længe i er mindre end 5
...    print(i) --> udskriv i
...    i +=1 --> læg 1 til i
... 
0
1
2
3
4 

For hver gang løkken kører bliver der lagt en til i. Når i rammer værdien 5 køres while-løkken ikke mere.

Løkker i løkker

Her vi vi anvende en while-løkke i et for-løkke til at udskrive tallene i 4 tabellen:

>>> for i in range(1,41):
...    while i%4==0:
...        print(i)
...        break
...
4
8
12
16
20
24
28
32
36
40

Output på en række

Nogle gange kan det være uhensigtsmæssigt at resultaterne udskrives på en lang række. Det gøres ved at tilføje end="*separator*" i print parantesen. Herudskrives tallene fra 1 - 10 vandret.

>>> for i in range(1,11):
...    print(i, end=" - ")
... 
1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 -

Opsummering af resultater

Ofte har man brug for at opsummere resultatet af ens udregning. Herunder vil vi lave et eksempel hvor vi opsummerer tallene fra 1-5:

>>> a = 0 
>>> for i in range(1,6):
...    a+= i
...    print(a)
... 
1
3
6
10
15

Først laver man en variabel, som man sætter til 0. I løkken kører vi den ønskede matematiske beregning, og lægger resultatet til a. Herefter udskrives a. Ulempen ved at anvende denne kode i Idle er, at Python udskriver resultatet efter hvert gennemløb af i. For at undgå dette må vi ændre i koden, og selv hente resultatet:

>>> a = 0
>>> for i in range(1,6):
...    a+=i
... 
>>> a
15

Forklaringen er, at Idle kun kan tage en kommando ad gangen. Så vi bliver nød til først at opmsummere vores tal, og til sidst bede Python om at udskrive værdien.

Opgaver

Trekanttal

Udskriv de første 20 trekantal givet ved formlen:

$$ T_n = 1+2+3+...+n=\frac{n \cdot (n-1)}{2} $$
Output
1 - 3 - 6 - 10 - 15 - 21 - 28 - 36 - 45 - 55 - 66 - 78 - 91 - 105 - 120 - 136 - 153 - 171 - 190 - 210 -