9.1 Midtveis-simulering: 20 flervalg

Komplett midtveis-simulering etter det reelle formatet: 20 flervalgsspørsmål, ingen kodeskriving, med fullstendige sporingsløsninger.

120 min
30 oppgaver
Midtveis-simulering20 flervalg
Din fremgang i kapitlet
0 / 30 oppgaver
Kapitlets plass i kurset
Forkunnskaper: Del 1–4 i denne boka. Simuleringen bruker ingen konstruksjon som ikke er gjennomgått der, og ingen kodeskriving.

- kap. 1.1 — variabler, uttrykk og operatorpresedens
- kap. 1.2 — lister, indeksering og slicing
- kap. 1.3 — løkker, range, zip og nøstede løkker
- kap. 1.4 — strenger, f-strenger og formatert utskrift
- kap. 1.5 — dictionaries og nøstede dictionaries
- kap. 1.6 — funksjoner, scope og lambda
- kap. 1.7 — sporingsmetoden: hvordan du fører en tavle over variablene
- kap. 2.1 og kap. 2.2 — kommandolinje, sys.argv og feilhåndtering
- kap. 4.1 — NumPy-arrays og forskjellen mellom liste og array
- kap. 8.1 — fillesing til dictionary (to av spørsmålene leser en fil)

Har du ikke lest Del 8 ennå, kan du ta simuleringen likevel: de to fillesings-spørsmålene viser filinnholdet i oppgaveteksten, og alt du trenger å kunne er split, strip og float.

Slik tar du simuleringen

Sett av 120 minutter og en klokke. Skriv svarene på papir, i to kolonner: spørsmålsnummer og bokstav (eller radpar for matche-tabellene). Åpne først løsningen når du er ferdig med alt.

Ikke kjør koden. Det er hele poenget: i oktober har du bare hodet og papiret. Skal du bare øve på én ting i dette kapitlet, øv på å føre en sporingstavle for hånd — metoden står i kap. 1.7.

BlokkSpørsmålPoengTid
11–55~25 min
26–107,5~30 min
311–156,5~35 min
416–206~30 min
Sum20 spørsmål25 poeng120 min

Blokkene er bare en tidsplan, ikke en del av det reelle settet. Tar du simuleringen som eksamenstrening, sitter du de 120 minuttene sammenhengende. Tar du den som lesetrening, er blokkgrensene naturlige pausepunkter — én blokk per kveld går helt fint.
Ett råd om disponering: matche-tabellene (spørsmål 6, 10, 14, 15, 19 og 20) er de dyreste enkeltspørsmålene, men også de mest mekaniske. Sitter du fast på en sporing, hopp videre og kom tilbake — et halvt poeng du henter i en tabell er verdt like mye som et halvt poeng du kjemper for i en nøstet løkke.

Blokk 1 — spørsmål 1–5

~25 minutter · 5 poeng · fem «select one» à 1 poeng.

Alle fem er kodesporing. Skriv utskriften på papir før du velger alternativ — det er den ferdigheten som blir målt, ikke evnen til å kjenne igjen et alternativ.

📝Oppgave 9.1.1
Sjanger A
Spørsmål 1 (1 poeng).

Hva skriver programmet ut?

total = 0
for k in range(2, 11, 3):
    total += k
print(total)

a) 26
b) 15
c) 18
d) 8

📝Oppgave 9.1.2
Sjanger A
Spørsmål 2 (1 poeng).

Programmet skriver ut én linje. Hvilken?

for i in range(1, 4):
    for j in range(i):
        print(i + j, end=' ')
print()

a) 1 2 3 4 5 6
b) 1 3 5
c) 1 2 3 3 4 5
d) 2 3 4 4 5 6

📝Oppgave 9.1.3
Sjanger A
Spørsmål 3 (1 poeng).

Hva skriver programmet ut?

tall = [4, 9, 16, 25, 36]
print(tall[-2], tall[1:4])

a) 25 [9, 16, 25]
b) 36 [9, 16, 25]
c) 25 [9, 16, 25, 36]
d) 16 [4, 9, 16]

📝Oppgave 9.1.4
Sjanger A
Spørsmål 4 (1 poeng).

Fire utgravningsruter er registrert, men bare tre av dem er ferdig opptelt. Hva skriver programmet ut?

rute = ['R1', 'R2', 'R3', 'R4']
funn = [4, 9, 2]
s = 0
for navn, antall in zip(rute, funn):
    s += antall
print(len(rute), s)

a) 3 15
b) 4 20
c) 3 20
d) 4 15

📝Oppgave 9.1.5
Sjanger A
Spørsmål 5 (1 poeng).

En radioaktiv prøve halveres i hver runde. Hva skriver programmet ut?

masse = 80.0
halveringer = 0
while masse > 5:
    masse = masse / 2
    halveringer += 1
print(masse, halveringer)

a) 2.5 5
b) 5.0 4
c) 5 4
d) 10.0 3

— naturlig pausepunkt —

Blokk 2 — spørsmål 6–10

~30 minutter · 7,5 poeng. Én matche-tabell om indeksering (2 poeng), tre «select one» (3 poeng) og én matche-tabell om feilhåndtering (2,5 poeng).

I matche-tabellene skal hver rad pares med ett nummer fra alternativlista. Samme nummer kan brukes flere ganger, og noen numre brukes ikke. Hver rad er 0,5 poeng.

📝Oppgave 9.1.6
Sjanger B
Spørsmål 6 (2 poeng, 0,5 per rad).

Gitt

x = [2, 0, 3]
y = [[5, 8, 13], [21, 34, 55], [89, 144, 233]]

Par hvert uttrykk med verdien det har.

RadUttrykk
1y[x[1]][x[0]]
2y[x[0]][x[-1]:]
3y[1][x[1]:x[2]]
4x[y[0][0] - 3]

Alternativer:
1. []
2. 3
3. [13]
4. 13

5. [21, 34, 55]

6. 89
7. 2
8. [89, 144, 233]

📝Oppgave 9.1.7
Sjanger A
Spørsmål 7 (1 poeng).

Hva skriver programmet ut?

print(-11 // 4, 2 ** 2 ** 3, 8 / 4)

a) -2 256 2.0
b) -3 64 2
c) -2 64 2.0
d) -3 256 2.0

📝Oppgave 9.1.8
Sjanger A
Spørsmål 8 (1 poeng).

Hva skriver programmet ut?

import numpy as np

maling = [2, 3]
vektor = np.array([2, 3])
print(maling + maling, vektor + vektor)

a) [4, 6] [4 6]
b) [2, 3, 2, 3] [2, 3, 2, 3]
c) [2, 3, 2, 3] [4 6]
d) [4, 6] [2 3 2 3]

📝Oppgave 9.1.9
Sjanger A
Spørsmål 9 (1 poeng).

Hva skriver programmet ut? Alternativene står mellom fnutter så mellomrommene blir synlige.

tid = 3.14159
nummer = 7
print(f'{tid:6.2f}|{nummer:03d}')

a) ' 3.14|007'
b) '3.14|007'
c) ' 3.14|7'
d) ' 3.142|007'

📝Oppgave 9.1.10
Sjanger C
Spørsmål 10 (2,5 poeng, 0,5 per rad).

En exception er en feil som avbryter programmet. Filen analyse.py inneholder:

import sys

maling = [8.0, 0.0, 2.5]
i = int(sys.argv[1])
faktor = float(sys.argv[2])
print(maling[i] / (faktor * maling[i - 1]))

Par hver kommandolinje med det som skjer.

RadKommandolinje
1python analyse.py 2 1.5
2python analyse.py 1
3python analyse.py to 1.5
4python analyse.py 1 2
5python analyse.py 5 1.5

Alternativer:
1. ValueError
2. IndexError
3. Ingen feil — programmet skriver et tall
4. ZeroDivisionError
5. TypeError

— naturlig pausepunkt —

Blokk 3 — spørsmål 11–15

~35 minutter · 6,5 poeng. Tre «select one» (3 poeng) og to matche-tabeller (2 + 1,5 poeng). Her kommer dictionaries, fillesing og løkketerminering.

📝Oppgave 9.1.11
Sjanger A
Spørsmål 11 (1 poeng).

Programmet skriver ut to linjer. Hvilket alternativ har begge riktig? Linjeskiftet er markert med /.

celle = {'A1': {'spenning': 4, 'strom': 7}, 'B2': {'spenning': 9}}
celle['B2']['strom'] = 3
print(len(celle), celle['A1']['strom'] + celle['B2']['strom'])
print('strom' in celle, 'A1' in celle)

a) 2 10 / True True
b) 2 12 / False True
c) 3 10 / False True
d) 2 10 / False True

📝Oppgave 9.1.12
Sjanger A
Spørsmål 12 (1 poeng).

Filen rystelser.txt inneholder registrerte jordskjelvstyrker:

dato;styrke
2026-03-02;2.4
2026-03-05;3.1
2026-03-11;1.7

Hva skriver programmet ut?

sum_styrke = 0
with open('rystelser.txt') as infile:
    infile.readline()
    for linje in infile:
        felt = linje.split(';')
        sum_styrke += float(felt[1])
print(sum_styrke)

a) 4.8
b) 7.2
c) 7
d) Programmet stopper med ValueError

📝Oppgave 9.1.13
Sjanger A
Spørsmål 13 (1 poeng).

En linje fra en semikolonseparert datafil er lest inn med linjeskiftet på. Hva skriver programmet ut?

linje = 'prove-7; 12.5 ;3\n'
felt = linje.split(';')
print(len(felt), repr(felt[-1]))

a) 2 '3'
b) 3 '3'
c) 3 '3\n'
d) 2 ' 12.5 '

📝Oppgave 9.1.14
Sjanger D
Spørsmål 14 (2 poeng, 0,5 per rad).

Avgjør for hver løkke om den terminerer eller går uendelig. Alle variabler er satt slik det står.

RadLøkke
1x = 10 og while x > 0: x = x - 3
2k = 5 og while k != 0: k = k - 2
3n = 1 og while n < 100: n = n * 2
4s = 0.0 og while s != 1.0: s = s + 0.1

Alternativer:
1. Terminerer
2. Går uendelig
📝Oppgave 9.1.15
Sjanger D
Spørsmål 15 (1,5 poeng, 0,5 per rad).

Oppgaven kodebitene skal løse: finn den største verdien i lista verdier, som er ikke-tom og kan inneholde negative tall. Etterpå skal storst inneholde svaret.

RadKodebit
1storst = verdier[0] og for v in verdier: if v > storst: storst = v
2storst = 0 og for v in verdier: if v > storst: storst = v
3storst = verdier[0] og for i in range(1, len(verdier)): if verdier[i] > storst: storst = verdier[i]

Alternativer:
1. Løser oppgaven
2. Løser den ikke

— naturlig pausepunkt —

Blokk 4 — spørsmål 16–20

~30 minutter · 6 poeng. Tre «select one» (3 poeng), én matche-tabell om slicing (1,5 poeng) og én om feilhåndtering (1,5 poeng). Dette er de siste seks poengene — husk at du skal krysse av på alt før tiden går ut.

📝Oppgave 9.1.16
Sjanger A
Spørsmål 16 (1 poeng).

Hva skriver programmet ut?

def juster(verdi):
    verdi = verdi + 10
    return verdi

verdi = 5
ny = juster(verdi)
print(verdi, ny)

a) 5 15
b) 15 15
c) 5 5
d) 15 5

📝Oppgave 9.1.17
Sjanger A
Spørsmål 17 (1 poeng).

Hva skriver programmet ut?

tekst = 'nord-sor-ost'
deler = tekst.split('-')
print(deler[1], '+'.join(deler[:2]), tekst.index('sor'))

a) sor nord+sor 4
b) sor nord+sor+ost 5
c) nord nord+sor 5
d) sor nord+sor 5

📝Oppgave 9.1.18
Sjanger E
Spørsmål 18 (1 poeng).

Funksjonen under regner ut den numeriske deriverte av en funksjon g i punktet x:

def derivert(g, x, h=1e-5):
    return (g(x + h) - g(x - h)) / (2 * h)

Hvilken linje skriver ut en tilnærming til den deriverte av f(x)=x3f(x) = x^3 i x=2x = 2 (den eksakte verdien er 12)?

a) print(derivert(x**3, 2))
b) print(derivert(lambda x: x**3, 2))
c) print(derivert('x**3', 2))
d) print(derivert(x**3, 2, 1e-5))

📝Oppgave 9.1.19
Sjanger B
Spørsmål 19 (1,5 poeng, 0,5 per rad).

Gitt t = [0.0, 0.5, 1.0, 1.5, 2.0]. Par hvert uttrykk med verdien.

RadUttrykk
1t[-1]
2t[:2]
3t[1:4:2]

Alternativer:
1. [0.5, 1.5]
2. 2.0
3. [0.0, 0.5]

4. [2.0]

5. [0.5, 1.0]
6. 1.5

📝Oppgave 9.1.20
Sjanger C
Spørsmål 20 (1,5 poeng, 0,5 per rad).

Gitt funksjonen

def middel(verdier):
    assert len(verdier) > 0, 'tom liste'
    return sum(verdier) / len(verdier)

Par hvert kall med det som skjer.

RadKall
1middel([])
2middel([2, 'tre'])
3middel([4, 6])

Alternativer:
1. TypeError
2. Ingen feil — funksjonen returnerer et tall
3. AssertionError

4. ValueError

5. ZeroDivisionError

Rett deg selv

Ett poeng per «select one», 0,5 poeng per rad i matche-tabellene. Maks 25 poeng, akkurat som på det reelle settet.

SpørsmålSjangerRiktig svarPoeng
1Ab1
2Ac1
3Aa1
4Ad1
5Ab1
6Brad 1→4, 2→1, 3→5, 4→22
7Ad1
8Ac1
9Aa1
10Crad 1→4, 2→2, 3→1, 4→3, 5→22,5
11Ad1
12Ab1
13Ac1
14Drad 1→1, 2→2, 3→1, 4→22
15Drad 1→1, 2→2, 3→11,5
16Aa1
17Ad1
18Eb1
19Brad 1→2, 2→3, 3→11,5
20Crad 1→3, 2→1, 3→21,5
Sum25

Hva sier summen? Ikke les den som en karakter. Midtveiseksamen teller 25 %, og karakteren A–F settes samlet til slutt sammen med den avsluttende eksamenen. Bruk summen som et kart over hva du skal lese om igjen, ikke som en spådom. Og husk at C er en god og vanlig karakter i IN1900 — målet er å skrive kode som virker og har riktig struktur, ikke å være plettfri.
Selvdiagnose — kryss av det du faktisk gjorde:
- ☐ Telte du iterasjonene i range(start, stop, step) uten å ta med stop? (Bommet du: kap. 1.3)
- ☐ Husket du at end=' ' fjerner linjeskiftet, og at det legger igjen et mellomrom helt til slutt? (kap. 1.4)
- ☐ Skilte du element (indeksering) fra liste (slicing), og husket du at slutten er eksklusiv? (kap. 1.2)
- ☐ Stoppet zip ved den korteste sekvensen i sporingen din? (kap. 1.3)
- ☐ Ga + deg skjøting på lister og elementvis sum på arrayer? (kap. 4.1)
- ☐ Fant du hvilken feil som kom først, og husket du at sys.argv[0] er filnavnet? (kap. 2.2)
- ☐ Avgjorde du løkketerminering ved å spørre om betingelsen kan bli usann? (kap. 1.3)
- ☐ Holdt du den lokale og den globale variabelen fra hverandre? (kap. 1.6)
- ☐ Skrev du utskriften med riktig antall desimaler og riktige mellomrom, ikke bare riktig tall? (kap. 1.4)
- ☐ Krysset du av på alle 20 spørsmålene?
Er det ett punkt du skal ta med deg videre, er det det siste tekniske: over halvparten av poengene på midtveis avgjøres av utskriftsdetaljer, ikke av regnestykker.
Kald bank — uten hint
Din fremgang
0 / 10 oppgaver
Fellekartet — hva hvert spørsmål testet

Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.

Skolesaga er en uavhengig læringsressurs og er ikke tilknyttet eller godkjent av Universitetet i Oslo. Dette er ikke offisielt studiemateriell. Les mer.