Vi bygger koden steg for steg

La oss sjekke om vi kan benytte python til å finne ut om et tall er et primtall. Vi tenker oss først at vi skal sjekke tallet 39. Jeg starter med å lage meg en variabel som heter ‘tall’, og setter den lik 39:

tall = 39

Dersom jeg ønsker å sjekke et annet tall, så kan jeg jo bare bytte det ut på den øverste linja; smart?

Hva bør vi gjøre videre? Vel, jeg bør jo sjekke om det er delelig med noen tall, men hvilke tall bør jeg sjekke? Det heter seg at primtall er alle tall som ikke er delelig med andre tall enn seg selv og 1. Det betyr at jeg må få python til å sjekke om 39 er delelig med tallene fra 2 og opp til 38. Dette blir altså 37 operasjoner, men siden datamaskiner er så raske, så skal nok dette gå greit.

Vi legger alt inn i en løkke

I programmering benytter vi oss ofte av løkker for å gjøre en operasjon flere ganger. I dette tilfellet, så ønsker vi å gjenta en operasjon med et tall som skal gå fra 2 til 38. Se på denne koden:

for i in range(2,39):
    print(i)

Den første linja starter løkka! Variabelen ‘i’ vil starte med verdien 2, og løkka slutter når ‘i’ har blitt 39. Derfor vil resultatet av koden bli:

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

Dette betyr altså at vi nå har kjørt koden ‘print(i)’ 37 ganger, og variabelen ‘i’ blir en større for hver gang.

Dette passer jo bra, for det er jo akkurat disse tallene som vi skal sjekke om vi kan dele 39 med 🙂

Rest etter divisjon

I python har vi en funksjon som sjekker rest etter en divisjon. Denne funksjonen skriver med ‘%’.

Det betyr følgende:

  • 4 % 3 gir 1
  • 4 % 2 gir 0
  • 15 % 3 gir 0
  • 15 % 4 gir 3

Som du sikker har forstått, så passer denne funksjonen veldig godt til et program som skal sjekke om noen tall er delelig på et annet tall. Vi skal i programmet vårt sjekke om 39 er delelig på tallene 2 til 38. Sjekk denne koden:

for i in range(2,39):
    print(39 % i)

Dersom vi kjører denne koden, så blir dette resultatet:

1
0
3
4
3
4
7
3
9
6
3
0
11
9
7
5
3
1
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1

Kan vi bruke denne informasjonen til å si noe om 39 er et primtall eller ikke?

Vel, vi ser at vi har fått svaret ‘0’ to ganger. Det er fordi 39 delt på 3 og 39 delt på 13 vil gi 0 i rest. Det betyr at dersom vi får noen svar som blir 0, så er ikke tallet vårt et primtall. Dette kan vi bruke. Sjekk denne koden:

# Her skriver du hvilket tall du vil sjekke
tall = 51 
#Denne variabelen er en 'bryter' som vi kan slå av og på (True/False)
prim = True 

# Jeg trenger en løkke som sjekker deleligheten for alle tall mindre enn 'tall'
for i in range(2,tall):
    if tall % i == 0:
        prim = False # Dersom det er delelig, så slår jeg av bryteren

if prim == True: # Dersom bryteren ikke er slått av
    print(tall, " er et primtall")
else: # Dersom bryteren er slått av
    print(tall, " er et sammensatt tall")

Her har jeg kodet ferdig et program som sjekker om et tall er et primtall. Les kommentarer i koden for forklaringer.

Dersom du vil bygge ut programmet:

  • La brukeren legge inn eget tall for sjekk
  • Gjøre koden mer effektiv (må den sjekke for alle tall?)
  • Lage en egen funksjon som sjekker om et tall er et primtall