Afsnit Py.5: Gentagne beregninger, betingede beregninger
Indholdet i dette afsnit skal ikke bruges i kurset
Introducerende Statistik og Dataanalyse med MATLAB, men er
medtaget for fuldstændighedens skyld.
Ofte kommer man ud for, at man ønsker at gentage et stykke kode
mange gange. Dette kan gøres ved en såkaldt
for-løkke. Denne består af en linje, der starter med
for og angivelse af, at en variabel skal løbe i en
bestemt mængde, og slutter med colon. De kommandoer, der skal
udføres, står på de følgende
indenterede linjer.
Følgende program finder for et givet heltal
hvilke tal mellem 1 og
der går op i tallet. Dette gøres ved en for-løkke med et index
der løber fra 1 til
og i hvert trin udregnes resten ved division
af
med
Efter løkken angives de
for hvilke resten er nul.
Undervejs bruges funktionen
floor,
der giver det største hele tal
mindre end eller lig med input til funktionen.
import numpy as np
n=12
divisor=np.arange(1:(n+1))
rest=np.repeat(0,n)
for j in range(n):
rest[j]=n-np.floor(n/(j+1))*(j+1)
print(divisor[rest==0])
| [ 1 2 3 4 6 12]
En for-løkke er velegnet, når man på forhånd ved, hvor mange gange
man skal løbe gennem løkken. Hvis man ikke ved dette, og det
afgøres af de beregninger, der laves undervejs, bruges en
while-løkke.
Denne starter med
while
og et sandshedsudsagn.
Så længde sandshedsudsagnet er sandt, løber man gennem løkken
(her skal man altså passe på ikke at lave en løkke, der aldrig stopper).
Det følgende program beregner alle fibonacci tal indtil første gang,
man får et tal, der er større end eller lig med 1000.
import numpy as np
fib=np.array([1,1])
while (fib[-1]<1000):
nye=fib[-1]+fib[-2]
fib=np.append(fib,nye) # vektoren fib forlænges med et tal
print(fib)
| [ 1 1 2 3 5 8 13 21 34 55 89 144 233 377
| 610 987 1597]
En while-løkke bruger et sandshedsudsagn til at bestemme, om løkken skal
fortsætte. Mere generelt kan man kontrollere, at et stykke kode udføres,
alt efter om en betingelse er opfyldt ved hjælp af en
if-konstruktion.
En if-konstruktion er på formen
if betingelse:, hvor de kommandoer,
der skal udføres, står på de efterfølgende indenterede linjer. Hvis der skal
foretages en anden handling, når if-betingelsen ikke er opfyldt, skal der på
en ny linje stå
else:, hvor
else har samme indent som
det oprindelige
if. Igen skal kommandoerne stå på de
følgende indenterede linjer.
I den første del af koden nedenfor findes alle lige tal mellem 1 og 10,
og i den anden del findes separat de lige og de ulige tal.
import numpy as np
# første del
lige=np.array([]) # tom struktur
for j in np.arange(1,11):
rest=j-np.floor(j/2)*2
if (rest==0):
lige=np.append(lige,j)
print(lige)
| [ 2. 4. 6. 8. 10.]
# anden del
lige=np.array([])
ulige=np.array([])
for j in np.arange(1,11):
rest=j-np.floor(j/2)*2
if (rest==0):
lige=np.append(lige,j)
else:
ulige=np.appand(ulige,j)
print(lige)
| [ 2. 4. 6. 8. 10.]
print(ulige)
| [1. 3. 5. 7. 9.]
ForegåendeNæste