Eksamenssett logo
eksamenssett.noTren målrettet
  • Ungdomsskole/VGS
  • Høyskole
  • Ressurser
  • Privatundervisning
  • Kontakt
eksamenssett.noTren målrettet

Komplett samling av eksamensoppgaver og løsninger for norsk skole.

Om ossPrivatundervisningPriserSlik bruker du sidenFAQPersonvernVilkårAngrerettKontaktKI-deklarasjon

© 2026 Eksamenssett.no · Alle rettigheter forbeholdt

Innholdet er utviklet med KI og kvalitetssikres kontinuerlig – av modellene, og ved at våre tusenvis av brukere kan melde fra om feil. Slik jobber vi med kvalitet →

Eksamenssett.no eies og drives av Studenthjelp Privatundervisning AS

Org.nr. 913 117 387 (Foretaksregisteret) · Aksel Olsens vei 10B, 1597 Moss · Ikke MVA-registrert

Eksamenssett logo
eksamenssett.noTren målrettet
  • Ungdomsskole/VGS
  • Høyskole
  • Ressurser
  • Privatundervisning
  • Kontakt
eksamenssett.noTren målrettet

Komplett samling av eksamensoppgaver og løsninger for norsk skole.

Om ossPrivatundervisningPriserSlik bruker du sidenFAQPersonvernVilkårAngrerettKontaktKI-deklarasjon

© 2026 Eksamenssett.no · Alle rettigheter forbeholdt

Innholdet er utviklet med KI og kvalitetssikres kontinuerlig – av modellene, og ved at våre tusenvis av brukere kan melde fra om feil. Slik jobber vi med kvalitet →

Eksamenssett.no eies og drives av Studenthjelp Privatundervisning AS

Org.nr. 913 117 387 (Foretaksregisteret) · Aksel Olsens vei 10B, 1597 Moss · Ikke MVA-registrert

Eksamenssett logo
eksamenssett.noTren målrettet
  • Ungdomsskole/VGS
  • Høyskole
  • Ressurser
  • Privatundervisning
  • Kontakt
eksamenssett.noTren målrettet

Komplett samling av eksamensoppgaver og løsninger for norsk skole.

Om ossPrivatundervisningPriserSlik bruker du sidenFAQPersonvernVilkårAngrerettKontaktKI-deklarasjon

© 2026 Eksamenssett.no · Alle rettigheter forbeholdt

Innholdet er utviklet med KI og kvalitetssikres kontinuerlig – av modellene, og ved at våre tusenvis av brukere kan melde fra om feil. Slik jobber vi med kvalitet →

Eksamenssett.no eies og drives av Studenthjelp Privatundervisning AS

Org.nr. 913 117 387 (Foretaksregisteret) · Aksel Olsens vei 10B, 1597 Moss · Ikke MVA-registrert

Eksamenssett logo
eksamenssett.noTren målrettet
  • Ungdomsskole/VGS
  • Høyskole
  • Ressurser
  • Privatundervisning
  • Kontakt
  1. Hjem
  2. Høyskole
  3. UiO
  4. IN1000
  5. Studieguide
IN1000 · UiO

Studieguide for IN1000 Introduksjon til objektorientert programmering

Komplett pensumoversikt for introduksjon til objektorientert programmering ved UiO — med forklaringer, sentrale begreper, eksamenstips og vanlige fallgruver. Eksamensoptimalisert basert på tidligere eksamener.

Innhold

  • Introduksjon
  • Variabler og datatyper
  • Kontrollstrukturer
  • Funksjoner
  • Lister og ordbøker
  • Filhåndtering
  • Klasser og objekter
  • Objektorientert design
  • Kodeforståelse og feilsøking
  • Eksamensstrategi
  • Formelark

Introduksjon

IN1000 Introduksjon til objektorientert programmering er det første programmeringskurset ved Institutt for informatikk, UiO. Kurset undervises i Python og dekker variabler, kontrollstrukturer, funksjoner, lister, ordbøker, filhåndtering, klasser og objekter. Eksamen er en 4-timers skriftlig digital prøve i Inspera der alle trykte og skrevne hjelpemidler er tillatt, men ingen elektroniske.

Denne studieguiden er kalibrert mot 13 ekte eksamens- og prøveeksamenssett fra 2014 til 2024. Poengfordelingen har vært påfallende stabil:

  • Del 1 (8–25 poeng): Kortsvar og flervalg. «Hva skrives ut?» og «Fyll inn det som mangler». Variabler, typekonvertering, løkker og ordbøker.
  • Del 2 (5–9 poeng): Flervalg om klasser og objekter. Referanser, self, innkapsling og grensesnitt.
  • Del 3 (23–36 poeng): «Skriv en funksjon …». Lister, ordbøker, strenger og validering av input.
  • Del 4 (45–55 poeng): Det store objektorienterte systemet. 3–5 klasser som samarbeider, ofte med innlesing fra fil. Denne delen avgjør karakteren.
  • Del 5 (9–15 poeng): Mindre algoritmeoppgaver på nøstede lister og ordbøker. Vanskeligst per poeng — ta den til slutt.

Like viktig er hva som ikke testes. I ingen av de 13 settene forekommer arv, super(), polymorfisme, abstrakte klasser, try/except, rekursjon, list comprehension, lambda, with open(...), csv-modulen eller sortering med egendefinert nøkkel. Bruker du tid på dette, bruker du tid på feil ting. Til gjengjeld går tre mønstre igjen i nesten hver eneste besvarelse: opptelling i ordbok, les-før-løkke-validering og delegering mellom klasser.

Variabler og datatyper

Eksamensrelevant

Dynamisk typing, de fire datatypene int/float/str/bool, typekonvertering med int() og str(), heltallsdivisjon, strenger som uforanderlige sekvenser og boolske uttrykk med kortslutning. Testes i Del 1 på hvert eneste eksamenssett.

Oversikt

Python er dynamisk typet: du deklarerer aldri typen til en variabel, den bestemmes av verdien du tilordner. De fire datatypene IN1000-eksamen faktisk tester er int (heltall), float (desimaltall), str (tekst) og bool (True/False).

En variabel er en referanse til et objekt i minnet. Skriver du a = 5, opprettes et heltallsobjekt med verdien 5, og a peker på det. Skriver du deretter a = a + 3, opprettes et nytt objekt med verdien 8, og a flyttes over dit. Det gamle objektet er urørt. Denne innsikten er den samme som forklarer hvorfor def dobbel(t): t = t * 2 ikke endrer kallerens variabel.

Typekonvertering — den hyppigste Del 1-oppgaven

Nesten hvert eneste eksamenssett åpner med en oppgave der forskjellen på tekst og tall avgjør svaret. Nøkkelen er at + gjør forskjellige ting avhengig av typene:

print("3" + "4")            # 34   (strenger settes sammen)
print(3 + 4)                # 7    (tall adderes)
print(int("3") + int("4"))  # 7
print(int("3" + "4") + 1)   # 35   (parentesen forst: "34" -> 34 -> 35)
print("5" * 3)              # 555  (streng gjentas)
print(5 * 3)                # 15

Framgangsmåten er alltid: skriv opp typen til hver operand før du regner. Er begge strenger, blir det sammensetting. Er begge tall, blir det aritmetikk. Er de blandet, blir det TypeError — bortsett fra streng ganger heltall, som gjentar strengen.

De tre konverteringsfunksjonene du trenger:

int("12")     # 12      tekst -> heltall
int("12.5")   # ValueError! ma ga via float
float("12.5") # 12.5
str(12)       # "12"     tall -> tekst

Heltallsdivisjon

Dette er en fast felle i sporingsoppgaver:

print(20 / 2)    # 10.0   float, ALLTID
print(20 / 3)    # 6.666666666666667
print(20 // 3)   # 6      heltallsdivisjon, runder ned
print(20 % 3)    # 2      resten

% brukes til å teste partall (if t % 2 == 0) og til å regne ut siffer. Legg merke til at / gir float selv når det går opp: 10.0, ikke 10. I en sporingsoppgave der svaret skal skrives «nøyaktig slik det skrives ut», er forskjellen på 10 og 10.0 hele poengsummen.

Strenger

En streng oppfører seg som en sekvens av tegn og kan indekseres og snittes som en liste:

s = "IN1000"
print(s[0])     # I
print(s[-1])    # 0     (siste tegn)
print(len(s))   # 6
print(s[2:])    # 1000
print(s[:2])    # IN
print(s[1:3])   # N1    (fra og med 1, til men ikke med 3)

Den avgjørende forskjellen fra lister: strenger kan ikke endres. s[0] = "X" gir TypeError: 'str' object does not support item assignment. Skal du «endre» en streng, bygger du en ny:

def fjern_tegn(setning, tegnliste):
    ny = ""
    for tegn in setning:
        if tegn not in tegnliste:
            ny = ny + tegn
    return ny

print(fjern_tegn("ha det fint", ["a", "e", "i", "o", "u"]))   # h dt fnt

Metodene du realistisk trenger er strip() (fjerner mellomrom og linjeskift i endene) og split() (deler opp i en liste). Begge hører hjemme i filhåndteringen.

Boolske verdier og uttrykk

Et sammenlikningsuttrykk er en boolsk verdi. Derfor skriver du

def to_av_tre(en, to, tre):
    antall = 0
    if en:
        antall += 1
    if to:
        antall += 1
    if tre:
        antall += 1
    return antall == 2

og ikke if antall == 2: return True else: return False. Skriv også if gratis: framfor if gratis == True:.

and, or og not kortslutter: Python slutter å evaluere så snart svaret er avgjort. Det er ikke bare en optimalisering — det er noe du kan bruke aktivt:

while start < len(a) and a[start] == 0:
    start += 1

Her sjekkes a[start] aldri når start har passert slutten av lista, fordi første del av and allerede er usann. Bytter du om de to testene, får du IndexError.

Gjennomregnet eksempel

Hva skrives ut?

tekst1 = "1"
tekst2 = "2"
tekst3 = "3"
tall = int(tekst1 + tekst2) + int(tekst3)
print(tall)

Steg for steg: tekst1 + tekst2 er sammensetting av to strenger og gir "12". int("12") gir tallet 12. int("3") gir 3. Summen er 15. Hadde parentesen stått rundt int(tekst1) + int(tekst2), ville svaret vært 6.

Referansemodellen — hvorfor tall og lister oppfører seg ulikt

Alt i Python er objekter, og alle variabler er referanser. Forskjellen mellom datatypene ligger i om objektet kan endres:

a = 5
b = a
b = b + 1
print(a, b)      # 5 6   — tall er uforanderlige, b fikk et NYTT objekt

liste1 = [1, 2]
liste2 = liste1
liste2.append(3)
print(liste1)    # [1, 2, 3] — samme objekt, endret pa stedet

int, float, str og bool er uforanderlige. Lister, ordbøker og dine egne objekter kan endres. Dette ene skillet forklarer tre eksamensfeller samtidig: hvorfor def dobbel(t): t = t * 2 ikke virker, hvorfor liste[i] = 0 inne i en funksjon likevel virker, og hvorfor k3 = k1 gir aliasing mellom to objekter.

Sammenlikning av verdier

print(3 == 3.0)        # True   — samme verdi
print("3" == 3)        # False  — ulik type, aldri like
print(True == 1)       # True   — bool er en spesialform av int
print(2 < 10)          # True
print("2" < "10")      # False! strenger sammenliknes tegn for tegn

Den siste linja er verdt å merke seg: "2" < "10" er usant fordi tegnet 2 kommer etter tegnet 1 i alfabetet. Leser du tall fra fil uten int() og sammenlikner dem, får du nettopp denne feilen — og ingen feilmelding.

Utskrift med print

navn = "Ida"
alder = 20
print("Navn:", navn, "Alder:", alder)     # Navn: Ida Alder: 20
print("Navn: " + navn + ", alder " + str(alder))

print med komma setter automatisk inn ett mellomrom mellom argumentene og konverterer alt til streng underveis. Med + må du selv sørge for både mellomrom og str(). På sporingsoppgaver der du skal svare «nøyaktig de tegnene som skrives ut», er dette mellomrommet ofte forskjellen på rett og galt svar.

Gjennomregnet eksempel 2

a = 5
b = a > 2
if a == 3 or b:
    a += 10
print(a)

b blir True fordi 5 > 2. I if-testen er a == 3 usant, men or b er sant, så hele uttrykket er sant. a blir 15. Legg merke til at b er en boolsk variabel, ikke en sammenlikning som gjentas — verdien ble låst da linja kjørte.

Nøkkelformler

  • •int(x), float(x), str(x) — konvertering
  • •len(x) — lengde på streng, liste eller ordbok
  • •s[a:b] — utsnitt fra og med å, til men ikke med b
  • •// heltallsdivisjon, % rest, / gir alltid float
  • •not, and, or — kortslutter fra venstre

Vanlige feil

  • ⚠️Å tro at "3" + "4" gir 7. Sammensetting, ikke addisjon.
  • ⚠️Å glemme str() når et tall skal settes sammen med tekst: gir TypeError.
  • ⚠️Å bruke / når oppgaven forutsetter heltall: 20/2 er 10.0, ikke 10.
  • ⚠️Å prøve å endre et tegn i en streng med s[0] = "X".

Eksamenstips

  • 💡Del 1 åpner nesten alltid med en typekonverteringsoppgave. Skriv opp typen til hver operand før du regner.
  • 💡Svar «nøyaktig slik det skrives ut»: 10 og 10.0 er ikke samme svar.
  • 💡Bruk kortslutning bevisst: legg lengdetesten først i and-uttrykket, så unngår du IndexError.
  • 💡Bygg alltid en ny streng når du skal «endre» tekst — strenger er uforanderlige.

Laster...

Laster…
eksamenssett.noTren målrettet

Komplett samling av eksamensoppgaver og løsninger for norsk skole.

Om ossPrivatundervisningPriserSlik bruker du sidenFAQPersonvernVilkårAngrerettKontaktKI-deklarasjon

© 2026 Eksamenssett.no · Alle rettigheter forbeholdt

Innholdet er utviklet med KI og kvalitetssikres kontinuerlig – av modellene, og ved at våre tusenvis av brukere kan melde fra om feil. Slik jobber vi med kvalitet →

Eksamenssett.no eies og drives av Studenthjelp Privatundervisning AS

Org.nr. 913 117 387 (Foretaksregisteret) · Aksel Olsens vei 10B, 1597 Moss · Ikke MVA-registrert