Læringsmål

Oversikt over læringsmål dekket i IN1900 Introduksjon til programmering med vitenskapelige anvendelser

Kilde: Læringsmålene er utformet av Skolesaga på grunnlag av emnets eksamensoppgaver, sensorveiledninger og emnebeskrivelse. De er ikke institusjonens offisielle læringsutbyttebeskrivelser.

171 kompetansemål43 av 43 kapitler har kompetansemål

Alle kompetansemål

kunne gjøre rede for hvordan emnet vurderes: to eksamener, vekting, varighet og poengsum
kunne peke ut hvilke temaer som har kommet i hvert eneste av de siste settene, og prioritere lesingen etter det
kunne forklare hva den som retter besvarelsen ser etter, og hvorfor delvis riktig kode gir uttelling
kunne sette opp en realistisk lese- og tidsplan fram mot begge eksamenene
kunne avgjøre hvilken datatype et uttrykk i Python gir, og hvordan heltall og desimaltall blandes
kunne regne ut hva et sammensatt aritmetisk uttrykk evaluerer til, med riktig rekkefølge på operatorene
kunne avgjøre om et logisk uttrykk er sant eller falskt, også når det er satt sammen av flere sammenligninger
kunne angi nøyaktig hva et lite program skriver ut, tegn for tegn
kunne hente ut et enkelt element og et utsnitt fra en liste, og si hvilken av dem som gir en ny liste
kunne regne ut hva et sammensatt uttrykk med indeks inne i indeks gir, i en nøstet liste
kunne skille å skjøte sammen to lister fra å legge dem sammen tall for tall
kunne angi nøyaktig hva et program som skriver ut lister, gir på skjermen
kunne telle nøyaktig hvor mange ganger en løkke kjører, og hvilke verdier tellevariabelen får
kunne bygge opp en sum eller en teller i en løkke, med riktig startverdi
kunne spore en løkke inne i en løkke der den indre grensen avhenger av den ytre
kunne avgjøre om en betingelsesstyrt løkke stopper etter et endelig antall runder, eller aldri
kunne dele opp og rydde en tekstlinje med de vanlige strengmetodene
kunne skrive en formatert utskrift med fast bredde og fast antall desimaler
kunne angi nøyaktig hva en utskrift blir, inkludert mellomrom og linjeskift
kunne forklare hvorfor en tekst må gjøres om til tall før du kan regne med den
kunne slå opp, sette inn og oppdatere verdier i en ordbok, og forklare hvorfor et oppslag noen ganger stopper programmet
kunne gå gjennom en ordbok med løkke og angi nøyaktig hva den skriver ut
kunne bygge en ordbok fra to lister, og telle opp verdier uten å vite nøklene på forhånd
kunne bygge og lese en nøstet ordbok, og holde de to nivåene fra hverandre
kunne skrive en funksjon med riktig signatur og riktig returverdi, og forklare forskjellen på å returnere og å skrive ut
kunne bruke standardverdier og navngitte argumenter, og avgjøre hvilken verdi hver parameter får i et gitt kall
kunne avgjøre om en variabel inne i en funksjon er den samme som den utenfor, og angi nøyaktig hva programmet skriver ut
kunne sende en funksjon inn som argument til en annen funksjon, og skrive den som en enlinjes funksjon der det passer
kunne føre en sporingstavle som viser variablenes verdier iterasjon for iterasjon
kunne telle nøyaktig hvor mange runder en løkke går, også når den ligger inne i en annen løkke
kunne skrive utskriften tegn for tegn, med riktige mellomrom, linjeskift og desimaler
kunne avgjøre om en betingelsesstyrt løkke stopper eller går i det uendelige
kunne spore et lite Python-program under tidspress og angi utskriften nøyaktig
kunne regne ut indekserings- og utsnittsuttrykk i nøstede lister og pare dem med riktig verdi
kunne avgjøre om en løkke stopper, og hvor mange runder den går
kunne kjenne igjen hvilken felle et midtveisspørsmål sikter mot, og sjekke nettopp den
kunne lese av hva `sys.argv` inneholder for et gitt kall på kommandolinjen, inkludert at element 0 er programnavnet
kunne konvertere tekst fra kommandolinjen eller `input` til tall med `int` og `float`, og vite når konverteringen feiler
kunne bruke `eval` til å regne ut et uttrykk brukeren har oppgitt som tekst
kunne skrive et kort program som sjekker antall argumenter og avslutter ryddig med `sys.exit`
kunne gå gjennom et kort program linje for linje og navngi den første feilen som utløses for et gitt kommandolinjekall
kunne skille `ValueError`, `TypeError`, `IndexError`, `KeyError`, `ZeroDivisionError` og `AssertionError` fra hverandre
kunne skrive `try`/`except`-blokker i riktig rekkefølge, med spesifikke feiltyper før generelle
kunne bruke `assert` og `raise` til å avvise ugyldige verdier, og forutsi hvilken melding brukeren ser
kunne spore et kommandolinje- eller input-program og angi utskriften nøyaktig under tidspress
kunne avgjøre hvilken exception som utløses først for et gitt kall, og matche den mot riktig alternativ
kunne skrive kort, idiomatisk `try`/`except`-kode som håndterer manglende, ubrukelige og ulovlige verdier
kunne finne og forklare de faste plantede feilene i et program med kommandolinje og feilhåndtering
kunne bruke en påstandssjekk i koden til å stoppe programmet med en presis beskjed når noe ikke stemmer
kunne forklare hvorfor to flyttall som matematisk er like sjelden er nøyaktig like i Python, og hva du gjør i stedet
kunne skrive en testfunksjon i den formen sensor forventer: fasit, beregnet verdi, toleranse og feilmelding
kunne velge en toleranse som passer til metodens nøyaktighet, og teste flere punkter i samme testfunksjon
kunne lese et summetegn som en oppskrift på en løkke, og oversette grensene riktig
kunne skrive en funksjon som summerer en endelig rekke, med akkumulator, riktig løkkegrense og retur på rett sted
kunne håndtere ledd som skifter fortegn og ledd som bare har oddetalls- eller partallspotenser
kunne løse en rekurrent rekke med løkke og to lagervariabler, og teste svaret mot en uavhengig fasit
kunne gjennomføre løsningsoppskriften for rekkeoppgaven på sju steg, uansett hvilken funksjon innpakningen bruker
kunne skrive den tredelte eksamensbesvarelsen — summen, testfunksjonen og en kort begrunnelse for antall ledd og toleranse
kunne kjenne igjen når oppgaven krever den rekurrente malen i stedet for summeringsmønsteret, og løse den med løkke
kunne finne og rette de fire feilene som koster mest: løkkegrensen, plasseringen av akkumulator og retur, ulik indeksering og likhetstegn på flyttall
kunne skrive en testfunksjon i sensors form under tidspress, med uavhengig fasit og begrunnet toleranse
kunne implementere en endelig rekke fra formel til kode uten å kjøre den
kunne kjenne igjen når en rekke er rekurrent, og løse den med løkke og to lagervariabler
kunne løse en flerdelt eksamensoppgave der sum, test, bruk og tabell inngår
kunne opprette en talltabell med nuller, ettere eller jevnt fordelte punkter, og forklare hvorfor N intervaller gir N+1 punkter
kunne regne elementvis på hele tabeller uten løkke, og skille dette fra hvordan lister skjøtes og gjentas
kunne bruke en funksjon du selv har skrevet på en hel tabell, og vite når du må bytte fra math-modulen til NumPy
kjenne til tabeller med to indekser: hente ut en rad, en kolonne og ett element
kunne skrive begge malene for en verditabell fra hukommelsen: med løkke og lister, og vektorisert uten løkke
kunne regne ut steglengden riktig og forklare hvorfor nevneren er antall intervaller
kunne avgjøre når oppgaveteksten krever vektorisering, og når en løkke er nødvendig
kunne kontrollere en ferdig punkttabell på antall punkter og siste verdi
kunne skrive plottemalen fra hukommelsen: én kurve per plottekall, navngitte akser, legende og visning til slutt
kunne plotte flere kurver i samme figur, også når de kommer som kolonner i en løsningstabell
kunne skille et tidsplott fra en fasekurve, og velge riktige aksenavn i begge
kunne beskrive en figur i ord som selvkontroll når koden ikke kan kjøres
kunne spore tabellkode og angi utskriften nøyaktig under tidspress
kunne skrive begge malene for en verditabell uten å kjøre koden
kunne skrive plottekode med legende og navngitte akser, og beskrive figuren i ord
kunne løse en flerdelt eksamensoppgave der tabell, vektorisering og plott inngår
kunne definere en klasse der konstruktøren tar imot parametrene og lagrer dem som attributter på instansen
kunne gjøre en instans kallbar, slik at objektet kan brukes overalt der en funksjon av én variabel er ventet
kunne avgjøre hva som hører i konstruktøren og hva som hører i kallmetoden, ut fra hva som er fast og hva som varierer
kunne spore et program med klasser og angi hvilken metode hvert uttrykk utløser
kunne gjøre et objekt utskrivbart ved å returnere en formatert tekst fra `__str__`
kunne implementere addisjon og multiplikasjon for egne objekter, og alltid returnere en ny instans av klassen
kunne begrunne når multiplikasjon skal gi et tall i stedet for et objekt, og skille de to tilfellene med `isinstance`
kunne legge sammen to objekter med ulikt antall tall, som polynomer av ulik grad, uten å endre operandene
kunne skrive en subklasse som arver metodene til en basisklasse, og bare fylle inn det som er nytt
kunne kalle basisklassens konstruktør riktig, som første linje og uten å sende instansen selv
kunne overstyre en arvet metode, og forklare hvorfor basisklassen er uendret av det
kunne avgjøre om et objekt hører til en klasse eller en av dens subklasser
kunne oversette en stykkvis definert funksjon fra klammeparentes til betinget logikk, med grensene på riktig side
kunne skrive den generelle stykkvise klassen der funksjonsverdier og grenser gis som lister
kunne kontrollere en stykkvis funksjon ved å regne ut verdien i nøyaktig grensepunktene
kunne forklare hvorfor en betinget funksjon må kalles ett punkt av gangen, og hva det vektoriserte alternativet gjør
kunne gå fra oppgavetekst til ferdig klasse ved å følge en fast oppskrift på sju steg
kunne avgjøre hvilken spesialmetode hvert krav i oppgaveteksten peker på, og skrive den i sensors korte stil
kunne skrive `__add__` og `__mul__` slik at de gir en ny instans, og begrunne når multiplikasjon i stedet skal gi et tall
kunne løse del b av oppgaven: instansiere klassen, kontrollere den med en testfunksjon og plotte den
kunne skrive en funksjonsklasse der konstruktøren tar det som er fast og kallmetoden det som varierer
kunne gi et objekt tekst og aritmetikk med spesialmetoder, og alltid returnere en ny instans fra en aritmetisk metode
kunne bygge en subklasse som regner om parametrene sine og sender dem videre til basisklassen
kunne løse en flerdelt klasseoppgave under tidspress, med testfunksjon og plott
kunne skrive den numeriske deriverte som funksjon med sentrert differanse og en fornuftig standard steglengde
kunne vise at en metode konvergerer, ved å regne feilen mot det eksakte svaret for flere steglengder og lese av faktoren mellom radene
kunne skrive trapesmetoden med riktige vekter på endepunktene og riktige summegrenser
kjenne til Newtons metode, sekantmetoden og biblioteksløseren, med stoppkriterium og riktig innpakning av funksjonen
kunne sette opp tabellene for en differenslikning, sette startverdien og fylle resten i løkke uten å bomme på antallet
kunne avgjøre hvilken av to koblede likninger som må oppdateres først, og begrunne det ut fra indeksene
kunne skrive simuleringsfunksjonen som returnerer begge tabellene, og plotte dem mot tid og mot hverandre
kunne kontrollere en simulering ved å regne ut likevekten for hånd eller halvere steglengden
kunne gjennomføre løsningsoppskriften for differenslikninger på sju steg, uansett hvilken innpakning modellen har
kunne avgjøre på et blikk om oppdateringsrekkefølgen er kritisk, og begrunne svaret ut fra likningene
kunne skrive plott-deloppgaven med tidsakse, forklaring og navngitte akser, og beskrive figuren i ord
kunne bruke bevaringssjekk og likevektsregning som kontroll uten fasit
kunne skrive forlengs og sentrert differanse, både som funksjon med default-steg og som kallbar klasse
kunne avgjøre om oppdateringsrekkefølgen i et koblet system er kritisk, og begrunne svaret ut fra likningene
kunne løse en likning numerisk med Newtons metode, sekantmetoden og et ferdig verktøy, og kontrollere svaret
kunne løse en flerdelt eksamensoppgave der simulering, likevektsregning og plott inngår
kunne skrive en løser for et initialverdiproblem som en funksjon som tar høyresiden, sluttiden, antall steg og startverdien, og returnerer tidspunktene og løsningen
kunne begrunne hvorfor N steg gir N+1 punkter, og plassere startverdien før løkka
kunne måle nøyaktigheten ved å halvere steglengden, og gjenkjenne at forlengs Euler har orden 1 og Heun orden 2
kunne bytte oppdateringsformel til baklengs Euler eller Heun uten å endre resten av mønsteret
kunne løse en skalar differensiallikning med det utleverte løser-hierarkiet i tre kall: instansiering, initialbetingelse og solve
kunne lese den utleverte modulen og peke ut argumentrekkefølgen i høyresiden, hva solve tar imot og hva den returnerer
kunne begrunne valget mellom en metode av orden 1 og en av orden 4 ut fra målt feil og antall funksjonskall
kunne kjenne igjen den eldre varianten av grensesnittet og skrive om et program fra den til den nye
kunne skrive høyresiden for et ODE-system: pakke ut tilstandsvektoren, regne ut hver derivert og returnere dem som en liste i samme rekkefølge
kunne hente ut komponentene av løsningen som kolonner og forklare forskjellen på en kurve og et øyeblikk
kunne lagre modellparametre i en klasse med `__call__` og skrive om en andreordens likning til et system
kunne plotte komponentene med navn og legende, og beskrive figuren presist i ord
kunne utvide et ferdig løser-hierarki med en ny metode ved å arve alt og skrive bare den ene metoden som gjør ett tidssteg
kunne bruke løserens egne verdier for høyreside, løsning, tid, stegnummer og steglengde inne i den metoden
kunne gi en subklasse egne parametre uten å miste oppsettet fra klassen den arver fra
kunne implementere en implisitt metode der hvert tidssteg løser en likning numerisk
kunne oversette en modell med flere størrelser til en høyreside med utpakking og returliste, uansett hvilken innpakning oppgaven bruker
kunne sette opp og kjøre det utleverte løserhierarkiet, og pakke ut komponentene riktig før plottet
kunne skrive en egen løser som funksjon og en ny metode som subklasse, inkludert den implisitte varianten med nullpunktsløser
kunne finne og rette de fem feilene som koster mest, og bruke fornuftssjekker når det ikke finnes noen fasit
kunne skrive en ODE-løser som funksjon fra bunnen, med riktig telling av skritt og punkter
kunne bruke det utleverte hierarkiet på en skalar likning og på et system, og pakke ut komponentene riktig
kunne løse en tipoengsoppgave med høyreside, løsning, plott og fornuftssjekk under tidspress
kunne implementere en ny ODE-metode som subklasse, både eksplisitt og implisitt med nullpunktsløser
kunne lese en tekstfil linje for linje med `with open` og dele hver linje i felt med riktig separator
kunne bygge en nøstet ordbok fra fila, med typekonvertering og med den indre ordboken opprettet før innsetting
kunne hoppe over en header-linje med `readline()` og bruke kolonnenavnene som feltnavn
kunne begrunne hvorfor en ordbok slår en liste når data skal slås opp på navn eller ID
kunne skrive en nøstet ordbok til fil med riktig separator, valgfri header-linje og linjeskift på hver linje
kunne filtrere en ordbok ved å bygge og returnere en ny, uten å endre argumentet
kunne forklare hva aliasing er, og hvorfor `ny = data` ikke er en kopi
kjenne til fast-bredde-lesing med posisjonsskiving, og hva sensor faktisk gir uttelling for der
kunne gjennomføre løsningsoppskriften for fillesingsoppgaven på seks steg, uansett hvilken innpakning dataene har
kunne skrive den tredelte eksamensbesvarelsen — les til nøstet ordbok, skriv struktur til fil, filtrer og returner en ny ordbok
kunne aggregere per ytre nøkkel og gruppere flere rader i en liste, med akkumulatoren nullstilt på rett sted
kunne finne og rette de fire feilene som koster mest: separator, header, mutasjon av argumentet og manglende linjeskift
kunne lese en tekstfil til en nøstet ordbok med riktig separator, rensing og typekonvertering
kunne hente feltnavnene fra en header-linje, og kjenne igjen feilmeldingen som kommer når linja ikke ble hoppet over
kunne skrive en datastruktur tilbake til fil og filtrere den uten å endre det som ble sendt inn
kunne løse en flerdelt fillesingsoppgave der gruppering, aggregering, filtrering og skriving inngår
kunne gjennomføre en komplett midtveisprøve på tid: 20 flervalgsspørsmål i 120 minutter, uten å kjøre koden
kunne spore et Python-program mekanisk og skrive utskriften tegn for tegn, med riktige løkkegrenser, indekser og utskriftsdetaljer
kunne avgjøre hvilken feil et program utløser først, og om en løkke terminerer eller går uendelig
kunne bruke poengsummen som et kart over hvilke kapitler du bør lese om igjen
kunne disponere et firetimers eksamenssett: 16 poeng flervalg på en halvtime, og 59 poeng kodeskriving på resten
kunne skrive de fem kjernemønstrene fra bunnen uten å kjøre koden — rekke med testfunksjon, klasse med spesialmetoder, differenslikning, ODE-system med det utleverte hierarkiet, og fillesing til nøstet dictionary
kunne vurdere egen besvarelse mot poenglistene og se hva som gir uttelling selv når koden ikke er helt riktig
kunne gjengi de faste mekaniske detaljene ved eksamenen, blant annet at siste oppgave er sensors poengfelt og ikke skal besvares
kunne disponere et firetimers eksamenssett: 14 poeng flervalg på en halvtime, og 61 poeng kodeskriving på resten
kunne skrive de tyngste mønstrene fra bunnen uten å kjøre koden — stykkvis klasse med spesialmetoder, rekurrent rekke med testfunksjon, ODE-system med parametere, og en ny løsermetode som subklasse
kunne skille mellom en programmeringsfeil og en egenskap ved metoden eller modellen, og begrunne skillet

Kapitler med kompetansemål

0Eksamenskart

0.1Eksamenskartet — slik testes IN1900
  • kunne gjøre rede for hvordan emnet vurderes: to eksamener, vekting, varighet og poengsum
  • kunne peke ut hvilke temaer som har kommet i hvert eneste av de siste settene, og prioritere lesingen etter det
  • kunne forklare hva den som retter besvarelsen ser etter, og hvorfor delvis riktig kode gir uttelling
  • kunne sette opp en realistisk lese- og tidsplan fram mot begge eksamenene

1Python-grunnlaget og kodesporing

1.1Variabler, datatyper, uttrykk og operatorpresedens
  • kunne avgjøre hvilken datatype et uttrykk i Python gir, og hvordan heltall og desimaltall blandes
  • kunne regne ut hva et sammensatt aritmetisk uttrykk evaluerer til, med riktig rekkefølge på operatorene
  • kunne avgjøre om et logisk uttrykk er sant eller falskt, også når det er satt sammen av flere sammenligninger
  • kunne angi nøyaktig hva et lite program skriver ut, tegn for tegn
1.2Lister, indeksering og slicing
  • kunne hente ut et enkelt element og et utsnitt fra en liste, og si hvilken av dem som gir en ny liste
  • kunne regne ut hva et sammensatt uttrykk med indeks inne i indeks gir, i en nøstet liste
  • kunne skille å skjøte sammen to lister fra å legge dem sammen tall for tall
  • kunne angi nøyaktig hva et program som skriver ut lister, gir på skjermen
1.3Løkker — for, while, range og nøstede løkker
  • kunne telle nøyaktig hvor mange ganger en løkke kjører, og hvilke verdier tellevariabelen får
  • kunne bygge opp en sum eller en teller i en løkke, med riktig startverdi
  • kunne spore en løkke inne i en løkke der den indre grensen avhenger av den ytre
  • kunne avgjøre om en betingelsesstyrt løkke stopper etter et endelig antall runder, eller aldri
1.4Strenger, f-strenger og formatert utskrift
  • kunne dele opp og rydde en tekstlinje med de vanlige strengmetodene
  • kunne skrive en formatert utskrift med fast bredde og fast antall desimaler
  • kunne angi nøyaktig hva en utskrift blir, inkludert mellomrom og linjeskift
  • kunne forklare hvorfor en tekst må gjøres om til tall før du kan regne med den
1.5Dictionaries og nøstede dictionaries
  • kunne slå opp, sette inn og oppdatere verdier i en ordbok, og forklare hvorfor et oppslag noen ganger stopper programmet
  • kunne gå gjennom en ordbok med løkke og angi nøyaktig hva den skriver ut
  • kunne bygge en ordbok fra to lister, og telle opp verdier uten å vite nøklene på forhånd
  • kunne bygge og lese en nøstet ordbok, og holde de to nivåene fra hverandre
1.6Funksjoner, scope og lambda
  • kunne skrive en funksjon med riktig signatur og riktig returverdi, og forklare forskjellen på å returnere og å skrive ut
  • kunne bruke standardverdier og navngitte argumenter, og avgjøre hvilken verdi hver parameter får i et gitt kall
  • kunne avgjøre om en variabel inne i en funksjon er den samme som den utenfor, og angi nøyaktig hva programmet skriver ut
  • kunne sende en funksjon inn som argument til en annen funksjon, og skrive den som en enlinjes funksjon der det passer
1.7DRILL — Kodesporing: «hva skrives ut?»
  • kunne føre en sporingstavle som viser variablenes verdier iterasjon for iterasjon
  • kunne telle nøyaktig hvor mange runder en løkke går, også når den ligger inne i en annen løkke
  • kunne skrive utskriften tegn for tegn, med riktige mellomrom, linjeskift og desimaler
  • kunne avgjøre om en betingelsesstyrt løkke stopper eller går i det uendelige
1.PPrøver til del 1: Python-grunnlaget og kodesporing
  • kunne spore et lite Python-program under tidspress og angi utskriften nøyaktig
  • kunne regne ut indekserings- og utsnittsuttrykk i nøstede lister og pare dem med riktig verdi
  • kunne avgjøre om en løkke stopper, og hvor mange runder den går
  • kunne kjenne igjen hvilken felle et midtveisspørsmål sikter mot, og sjekke nettopp den

2Robuste programmer: input, kommandolinje og feilhåndtering

2.1Kommandolinje, brukerinput og eval
  • kunne lese av hva `sys.argv` inneholder for et gitt kall på kommandolinjen, inkludert at element 0 er programnavnet
  • kunne konvertere tekst fra kommandolinjen eller `input` til tall med `int` og `float`, og vite når konverteringen feiler
  • kunne bruke `eval` til å regne ut et uttrykk brukeren har oppgitt som tekst
  • kunne skrive et kort program som sjekker antall argumenter og avslutter ryddig med `sys.exit`
2.2DRILL — Feilhåndtering: hvilken exception utløses?
  • kunne gå gjennom et kort program linje for linje og navngi den første feilen som utløses for et gitt kommandolinjekall
  • kunne skille `ValueError`, `TypeError`, `IndexError`, `KeyError`, `ZeroDivisionError` og `AssertionError` fra hverandre
  • kunne skrive `try`/`except`-blokker i riktig rekkefølge, med spesifikke feiltyper før generelle
  • kunne bruke `assert` og `raise` til å avvise ugyldige verdier, og forutsi hvilken melding brukeren ser
2.PPrøver til del 2: Robuste programmer: input, kommandolinje og feilhåndtering
  • kunne spore et kommandolinje- eller input-program og angi utskriften nøyaktig under tidspress
  • kunne avgjøre hvilken exception som utløses først for et gitt kall, og matche den mot riktig alternativ
  • kunne skrive kort, idiomatisk `try`/`except`-kode som håndterer manglende, ubrukelige og ulovlige verdier
  • kunne finne og forklare de faste plantede feilene i et program med kommandolinje og feilhåndtering

3Funksjoner, testing og rekker

3.1Testfunksjoner og assert
  • kunne bruke en påstandssjekk i koden til å stoppe programmet med en presis beskjed når noe ikke stemmer
  • kunne forklare hvorfor to flyttall som matematisk er like sjelden er nøyaktig like i Python, og hva du gjør i stedet
  • kunne skrive en testfunksjon i den formen sensor forventer: fasit, beregnet verdi, toleranse og feilmelding
  • kunne velge en toleranse som passer til metodens nøyaktighet, og teste flere punkter i samme testfunksjon
3.2Rekker og summer: Taylor- og potensrekker
  • kunne lese et summetegn som en oppskrift på en løkke, og oversette grensene riktig
  • kunne skrive en funksjon som summerer en endelig rekke, med akkumulator, riktig løkkegrense og retur på rett sted
  • kunne håndtere ledd som skifter fortegn og ledd som bare har oddetalls- eller partallspotenser
  • kunne løse en rekurrent rekke med løkke og to lagervariabler, og teste svaret mot en uavhengig fasit
3.3DRILL — Rekke-implementering med testfunksjon
  • kunne gjennomføre løsningsoppskriften for rekkeoppgaven på sju steg, uansett hvilken funksjon innpakningen bruker
  • kunne skrive den tredelte eksamensbesvarelsen — summen, testfunksjonen og en kort begrunnelse for antall ledd og toleranse
  • kunne kjenne igjen når oppgaven krever den rekurrente malen i stedet for summeringsmønsteret, og løse den med løkke
  • kunne finne og rette de fire feilene som koster mest: løkkegrensen, plasseringen av akkumulator og retur, ulik indeksering og likhetstegn på flyttall
3.PPrøver til del 3: Funksjoner, testing og rekker
  • kunne skrive en testfunksjon i sensors form under tidspress, med uavhengig fasit og begrunnet toleranse
  • kunne implementere en endelig rekke fra formel til kode uten å kjøre den
  • kunne kjenne igjen når en rekke er rekurrent, og løse den med løkke og to lagervariabler
  • kunne løse en flerdelt eksamensoppgave der sum, test, bruk og tabell inngår

4NumPy, vektorisering og plotting

4.1NumPy-arrays: oppretting, vektorisering og 2D
  • kunne opprette en talltabell med nuller, ettere eller jevnt fordelte punkter, og forklare hvorfor N intervaller gir N+1 punkter
  • kunne regne elementvis på hele tabeller uten løkke, og skille dette fra hvordan lister skjøtes og gjentas
  • kunne bruke en funksjon du selv har skrevet på en hel tabell, og vite når du må bytte fra math-modulen til NumPy
  • kjenne til tabeller med to indekser: hente ut en rad, en kolonne og ett element
4.2Lister vs. NumPy — «med løkke / uten løkke»
  • kunne skrive begge malene for en verditabell fra hukommelsen: med løkke og lister, og vektorisert uten løkke
  • kunne regne ut steglengden riktig og forklare hvorfor nevneren er antall intervaller
  • kunne avgjøre når oppgaveteksten krever vektorisering, og når en løkke er nødvendig
  • kunne kontrollere en ferdig punkttabell på antall punkter og siste verdi
4.3Plotting med matplotlib
  • kunne skrive plottemalen fra hukommelsen: én kurve per plottekall, navngitte akser, legende og visning til slutt
  • kunne plotte flere kurver i samme figur, også når de kommer som kolonner i en løsningstabell
  • kunne skille et tidsplott fra en fasekurve, og velge riktige aksenavn i begge
  • kunne beskrive en figur i ord som selvkontroll når koden ikke kan kjøres
4.PPrøver til del 4: NumPy, vektorisering og plotting
  • kunne spore tabellkode og angi utskriften nøyaktig under tidspress
  • kunne skrive begge malene for en verditabell uten å kjøre koden
  • kunne skrive plottekode med legende og navngitte akser, og beskrive figuren i ord
  • kunne løse en flerdelt eksamensoppgave der tabell, vektorisering og plott inngår

5Klasser med spesialmetoder

5.1Klasser, `__init__` og `__call__`
  • kunne definere en klasse der konstruktøren tar imot parametrene og lagrer dem som attributter på instansen
  • kunne gjøre en instans kallbar, slik at objektet kan brukes overalt der en funksjon av én variabel er ventet
  • kunne avgjøre hva som hører i konstruktøren og hva som hører i kallmetoden, ut fra hva som er fast og hva som varierer
  • kunne spore et program med klasser og angi hvilken metode hvert uttrykk utløser
5.2Spesialmetoder: `__str__`, `__add__`, `__mul__`
  • kunne gjøre et objekt utskrivbart ved å returnere en formatert tekst fra `__str__`
  • kunne implementere addisjon og multiplikasjon for egne objekter, og alltid returnere en ny instans av klassen
  • kunne begrunne når multiplikasjon skal gi et tall i stedet for et objekt, og skille de to tilfellene med `isinstance`
  • kunne legge sammen to objekter med ulikt antall tall, som polynomer av ulik grad, uten å endre operandene
5.3Arv og `super()`
  • kunne skrive en subklasse som arver metodene til en basisklasse, og bare fylle inn det som er nytt
  • kunne kalle basisklassens konstruktør riktig, som første linje og uten å sende instansen selv
  • kunne overstyre en arvet metode, og forklare hvorfor basisklassen er uendret av det
  • kunne avgjøre om et objekt hører til en klasse eller en av dens subklasser
5.4Stykkvise og diskontinuerlige funksjoner
  • kunne oversette en stykkvis definert funksjon fra klammeparentes til betinget logikk, med grensene på riktig side
  • kunne skrive den generelle stykkvise klassen der funksjonsverdier og grenser gis som lister
  • kunne kontrollere en stykkvis funksjon ved å regne ut verdien i nøyaktig grensepunktene
  • kunne forklare hvorfor en betinget funksjon må kalles ett punkt av gangen, og hva det vektoriserte alternativet gjør
5.5DRILL — Klasser med spesialmetoder
  • kunne gå fra oppgavetekst til ferdig klasse ved å følge en fast oppskrift på sju steg
  • kunne avgjøre hvilken spesialmetode hvert krav i oppgaveteksten peker på, og skrive den i sensors korte stil
  • kunne skrive `__add__` og `__mul__` slik at de gir en ny instans, og begrunne når multiplikasjon i stedet skal gi et tall
  • kunne løse del b av oppgaven: instansiere klassen, kontrollere den med en testfunksjon og plotte den
5.PPrøver til del 5: Klasser med spesialmetoder
  • kunne skrive en funksjonsklasse der konstruktøren tar det som er fast og kallmetoden det som varierer
  • kunne gi et objekt tekst og aritmetikk med spesialmetoder, og alltid returnere en ny instans fra en aritmetisk metode
  • kunne bygge en subklasse som regner om parametrene sine og sender dem videre til basisklassen
  • kunne løse en flerdelt klasseoppgave under tidspress, med testfunksjon og plott

6Numeriske metoder som kodemønstre

6.1Numerisk derivasjon, integrasjon og nullpunkt
  • kunne skrive den numeriske deriverte som funksjon med sentrert differanse og en fornuftig standard steglengde
  • kunne vise at en metode konvergerer, ved å regne feilen mot det eksakte svaret for flere steglengder og lese av faktoren mellom radene
  • kunne skrive trapesmetoden med riktige vekter på endepunktene og riktige summegrenser
  • kjenne til Newtons metode, sekantmetoden og biblioteksløseren, med stoppkriterium og riktig innpakning av funksjonen
6.2Differenslikninger
  • kunne sette opp tabellene for en differenslikning, sette startverdien og fylle resten i løkke uten å bomme på antallet
  • kunne avgjøre hvilken av to koblede likninger som må oppdateres først, og begrunne det ut fra indeksene
  • kunne skrive simuleringsfunksjonen som returnerer begge tabellene, og plotte dem mot tid og mot hverandre
  • kunne kontrollere en simulering ved å regne ut likevekten for hånd eller halvere steglengden
6.3DRILL — Differenslikninger
  • kunne gjennomføre løsningsoppskriften for differenslikninger på sju steg, uansett hvilken innpakning modellen har
  • kunne avgjøre på et blikk om oppdateringsrekkefølgen er kritisk, og begrunne svaret ut fra likningene
  • kunne skrive plott-deloppgaven med tidsakse, forklaring og navngitte akser, og beskrive figuren i ord
  • kunne bruke bevaringssjekk og likevektsregning som kontroll uten fasit
6.PPrøver til del 6: Numeriske metoder som kodemønstre
  • kunne skrive forlengs og sentrert differanse, både som funksjon med default-steg og som kallbar klasse
  • kunne avgjøre om oppdateringsrekkefølgen i et koblet system er kritisk, og begrunne svaret ut fra likningene
  • kunne løse en likning numerisk med Newtons metode, sekantmetoden og et ferdig verktøy, og kontrollere svaret
  • kunne løse en flerdelt eksamensoppgave der simulering, likevektsregning og plott inngår

7ODE-løsere og ODESolver-hierarkiet

7.1ODE-løser som funksjon: forward Euler
  • kunne skrive en løser for et initialverdiproblem som en funksjon som tar høyresiden, sluttiden, antall steg og startverdien, og returnerer tidspunktene og løsningen
  • kunne begrunne hvorfor N steg gir N+1 punkter, og plassere startverdien før løkka
  • kunne måle nøyaktigheten ved å halvere steglengden, og gjenkjenne at forlengs Euler har orden 1 og Heun orden 2
  • kunne bytte oppdateringsformel til baklengs Euler eller Heun uten å endre resten av mønsteret
7.2Det utleverte ODESolver-hierarkiet: bruke ForwardEuler og RungeKutta4
  • kunne løse en skalar differensiallikning med det utleverte løser-hierarkiet i tre kall: instansiering, initialbetingelse og solve
  • kunne lese den utleverte modulen og peke ut argumentrekkefølgen i høyresiden, hva solve tar imot og hva den returnerer
  • kunne begrunne valget mellom en metode av orden 1 og en av orden 4 ut fra målt feil og antall funksjonskall
  • kunne kjenne igjen den eldre varianten av grensesnittet og skrive om et program fra den til den nye
7.3ODE-systemer: pakke ut u og plotte komponentene
  • kunne skrive høyresiden for et ODE-system: pakke ut tilstandsvektoren, regne ut hver derivert og returnere dem som en liste i samme rekkefølge
  • kunne hente ut komponentene av løsningen som kolonner og forklare forskjellen på en kurve og et øyeblikk
  • kunne lagre modellparametre i en klasse med `__call__` og skrive om en andreordens likning til et system
  • kunne plotte komponentene med navn og legende, og beskrive figuren presist i ord
7.4Subklasse av ODESolver: skriv `advance`
  • kunne utvide et ferdig løser-hierarki med en ny metode ved å arve alt og skrive bare den ene metoden som gjør ett tidssteg
  • kunne bruke løserens egne verdier for høyreside, løsning, tid, stegnummer og steglengde inne i den metoden
  • kunne gi en subklasse egne parametre uten å miste oppsettet fra klassen den arver fra
  • kunne implementere en implisitt metode der hvert tidssteg løser en likning numerisk
7.5DRILL — ODE-oppgaver med roterende innpakning
  • kunne oversette en modell med flere størrelser til en høyreside med utpakking og returliste, uansett hvilken innpakning oppgaven bruker
  • kunne sette opp og kjøre det utleverte løserhierarkiet, og pakke ut komponentene riktig før plottet
  • kunne skrive en egen løser som funksjon og en ny metode som subklasse, inkludert den implisitte varianten med nullpunktsløser
  • kunne finne og rette de fem feilene som koster mest, og bruke fornuftssjekker når det ikke finnes noen fasit
7.PPrøver til del 7: ODE-løsere og ODESolver-hierarkiet
  • kunne skrive en ODE-løser som funksjon fra bunnen, med riktig telling av skritt og punkter
  • kunne bruke det utleverte hierarkiet på en skalar likning og på et system, og pakke ut komponentene riktig
  • kunne løse en tipoengsoppgave med høyreside, løsning, plott og fornuftssjekk under tidspress
  • kunne implementere en ny ODE-metode som subklasse, både eksplisitt og implisitt med nullpunktsløser

8Fillesing og datastrukturer

8.1Fillesing til nøstet dictionary
  • kunne lese en tekstfil linje for linje med `with open` og dele hver linje i felt med riktig separator
  • kunne bygge en nøstet ordbok fra fila, med typekonvertering og med den indre ordboken opprettet før innsetting
  • kunne hoppe over en header-linje med `readline()` og bruke kolonnenavnene som feltnavn
  • kunne begrunne hvorfor en ordbok slår en liste når data skal slås opp på navn eller ID
8.2Filskriving, filtrering og fast-bredde-felt
  • kunne skrive en nøstet ordbok til fil med riktig separator, valgfri header-linje og linjeskift på hver linje
  • kunne filtrere en ordbok ved å bygge og returnere en ny, uten å endre argumentet
  • kunne forklare hva aliasing er, og hvorfor `ny = data` ikke er en kopi
  • kjenne til fast-bredde-lesing med posisjonsskiving, og hva sensor faktisk gir uttelling for der
8.3DRILL — Fillesing til nøstet dict med filtrering
  • kunne gjennomføre løsningsoppskriften for fillesingsoppgaven på seks steg, uansett hvilken innpakning dataene har
  • kunne skrive den tredelte eksamensbesvarelsen — les til nøstet ordbok, skriv struktur til fil, filtrer og returner en ny ordbok
  • kunne aggregere per ytre nøkkel og gruppere flere rader i en liste, med akkumulatoren nullstilt på rett sted
  • kunne finne og rette de fire feilene som koster mest: separator, header, mutasjon av argumentet og manglende linjeskift
8.PPrøver til del 8: Fillesing og datastrukturer
  • kunne lese en tekstfil til en nøstet ordbok med riktig separator, rensing og typekonvertering
  • kunne hente feltnavnene fra en header-linje, og kjenne igjen feilmeldingen som kommer når linja ikke ble hoppet over
  • kunne skrive en datastruktur tilbake til fil og filtrere den uten å endre det som ble sendt inn
  • kunne løse en flerdelt fillesingsoppgave der gruppering, aggregering, filtrering og skriving inngår

9Eksamenstrening

9.1Midtveis-simulering: 20 flervalg
  • kunne gjennomføre en komplett midtveisprøve på tid: 20 flervalgsspørsmål i 120 minutter, uten å kjøre koden
  • kunne spore et Python-program mekanisk og skrive utskriften tegn for tegn, med riktige løkkegrenser, indekser og utskriftsdetaljer
  • kunne avgjøre hvilken feil et program utløser først, og om en løkke terminerer eller går uendelig
  • kunne bruke poengsummen som et kart over hvilke kapitler du bør lese om igjen
9.2Avsluttende øvingseksamen 1 — epidemi-innpakning
  • kunne disponere et firetimers eksamenssett: 16 poeng flervalg på en halvtime, og 59 poeng kodeskriving på resten
  • kunne skrive de fem kjernemønstrene fra bunnen uten å kjøre koden — rekke med testfunksjon, klasse med spesialmetoder, differenslikning, ODE-system med det utleverte hierarkiet, og fillesing til nøstet dictionary
  • kunne vurdere egen besvarelse mot poenglistene og se hva som gir uttelling selv når koden ikke er helt riktig
  • kunne gjengi de faste mekaniske detaljene ved eksamenen, blant annet at siste oppgave er sensors poengfelt og ikke skal besvares
9.3Avsluttende øvingseksamen 2 — mekanikk/nervecelle-innpakning med subklasse
  • kunne disponere et firetimers eksamenssett: 14 poeng flervalg på en halvtime, og 61 poeng kodeskriving på resten
  • kunne skrive de tyngste mønstrene fra bunnen uten å kjøre koden — stykkvis klasse med spesialmetoder, rekurrent rekke med testfunksjon, ODE-system med parametere, og en ny løsermetode som subklasse
  • kunne skille mellom en programmeringsfeil og en egenskap ved metoden eller modellen, og begrunne skillet
  • kunne vurdere egen besvarelse mot poenglistene og se hva som gir uttelling selv når koden ikke er helt riktig