Komplett pensumoversikt for introduksjon til programmering med vitenskapelige anvendelser ved UiO — med forklaringer, sentrale begreper, eksamenstips og vanlige fallgruver. Eksamensoptimalisert basert på tidligere eksamener.
IN1900 Introduksjon til programmering med vitenskapelige anvendelser er et forstesemesterkurs ved Universitetet i Oslo rettet mot studenter i naturvitenskap og matematikk. Kurset dekker Python-programmering med fokus på numeriske metoder, plotting og vitenskapelig databehandling. Eksamen er skriftlig (4 timer) uten hjelpemidler, og består typisk av 14-16 oppgaver med totalt 75 poeng. Oppgavene er en blanding av flervalg ('hva skrives ut?'), korte kodeoppgaver og lengre programmeringsoppgaver.
Eksamen tester både evnen til a lese og forstå kode (trace gjennom programmer mentalt) og a skrive kode fra bunnen av. De første 5-7 oppgavene er vanligvis flervalg (2 poeng hver), mens de siste 5-8 oppgavene krever at du skriver kode (3-12 poeng). De tyngste oppgavene (10-12 poeng) involverer alltid klasser med spesialmetoder, filhåndtering med ordbeker, eller differensiallikninger/ODE-losere.
Sentralt tips: Ov på å trace kode for hånd -- forstall hva for-løkker, while-løkker og list comprehensions produserer uten å kjøre koden. Dette utgjor 20-30 % av poengene og er ren oving. De store oppgavene følger faste mønstre (Forward Euler, fillesing til dict, klasse med __call__) som du kan drille på forhand.
Variabler, datatyper, kontrollstrukturer (if/elif/else, for, while), funksjoner, lister, strenger og list comprehensions. Fundamentet som testes i nesten alle oppgaver.
Python-grunnleggende utgjor kjernen i IN1900 og testes direkte i de første 5-7 oppgavene på eksamen. Disse er typisk flervalgsoppgaver der du må trace gjennom kort kode og bestemme hva som skrives ut. Du må ha fullstendig kontroll på hvordan variabler, løkker, lister og funksjoner fungerer i Python. I tillegg brukes grunnleggende Python-kunnskap i alle de større oppgavene, sa dette er det aller viktigste temaet å beherske.
Python er dynamisk typet -- du trenger ikke deklarere typen. De viktigste typene er int, float, str, list, tuple og dict. Husk at divisjon med / alltid gir float i Python 3, mens // gir heltallsdivisjon (runder ned). Typen bool har verdiene True og False og brukes i betingelser. Python konverterer automatisk mellom int og float ved behov: 3 + 0.5 gir 3.5 (float).
Konvertering mellom typer: int('42') konverterer streng til heltall, float('3.14') til desimaltall. Feiler dersom strengen ikke er et gyldig tall (ValueError). str(42) konverterer tall til streng.
if/elif/else: Python bruker innrykk (4 mellomrom) for å markere blokker. Husk at elif bare evalueres dersom forrige betingelse var False. Du kan kjede flere elif-grener, men bare den første som matcher kjøres.
for-løkker: for i in range(n) gir verdiene 0, 1, ..., n-1. range(a, b) gir a, a+1, ..., b-1. range(a, b, step) går med angitt steglengde. Du kan også iterere direkte over lister: for x in my_list. Nesta for-løkker er vanlige på eksamen -- den indre lokken kjører helt ferdig for hver iterasjon av den ytre.
while-løkker: Kjører sa lenge betingelsen er True. Betingelsen sjekkes for starten av hver iterasjon, ikke underveis. På eksamen brukes disse ofte i oppgaver der du må telle antall iterasjoner eller finne sluttverdien av en variabel. Typisk møte: to variabler som oppdateres i lokken, der du må holde styr på begge.
Funksjoner defineres med def. De kan ha standardverdier for argumenter (def f(x, h=1e-4)) og returnere verdier med return. Husk: uten return returnerer funksjonen None. En funksjon kan returnere flere verdier som en tuple: return x, y, som pakkes ut med a, b = f().
Lambda-funksjoner er anonyme enlinjes-funksjoner: lambda x: x**2. De brukes når du trenger å sende en enkel funksjon som argument, f.eks. til numerisk derivasjon.
Lister er mutbare sekvenser. Viktige operasjoner: append() legger til på slutten, len() gir lengden, slicing (a[1:3]) gir en ny liste med element 1 og 2, negativ indeksering (a[-1]) gir siste element. Listene i Python kan inneholde ulike typer, men i IN1900 brukes typisk lister med tall.
List comprehensions er kompakte uttrykk for å bygge lister: [x**2 for x in range(5)] gir [0, 1, 4, 9, 16]. Du kan også legge til betingelser: [x for x in range(10) if x % 2 == 0] gir [0, 2, 4, 6, 8].
zip: zip(a, b) kombinerer to lister element for element og returnerer par. list(zip([1,2], [3,4])) gir [(1,3), (2,4)]. Brukes ofte med list comprehensions for å operere på to lister samtidig.
Tupler: Tupler er som lister, men immutable (kan ikke endres etter opprettelse). Skrives med paranteser: (1, 2, 3). Funksjoner som returnerer flere verdier returnerer egentlig en tuple.
Strenger er immutable sekvenser av tegn. Du kan indeksere og slice strenger akkurat som lister: 'Python'[0] gir 'P', 'Python'[2:4] gir 'th'. Viktige metoder: split() deler på mellomrom (eller angitt separator), strip() fjerner whitespace fra endene, join() setter sammen en liste av strenger. f-strenger brukes til formatering: f'x={x:.2f}' gir tallet med 2 desimaler.
Strengkonkatenering: 'Hello' + 'World' gir 'HelloWorld'. Merk at det ikke legges til mellomrom automatisk. På eksamen brukes dette i oppgaver med zip og list comprehensions for å sette sammen navn.
first_names = ['Minch', 'Han', 'Luke']
last_names = ['Yoda', 'Solo', 'Skywalker']
names = [last + first for first, last in zip(first_names, last_names)]
print(names[-1])
Løsning: zip gir parene ('Minch','Yoda'), ('Han','Solo'), ('Luke','Skywalker'). List comprehension lager ['YodaMinch', 'SoloHan', 'SkywalkerLuke']. names[-1] er siste element: SkywalkerLuke.
n = 0
k = 10
while n < k:
n = n + 2
k = k + 1
Løsning: Trace verdiene: (n=0,k=10), (2,11), (4,12), (6,13), (8,14), (10,15), (12,16), (14,17), (16,18), (18,19), (20,20). Når n=20 og k=20 er betingelsen n < k ikke oppfylt lenger (20 < 20 er False). Svar: n = 20.
Nøkkelformler
Vanlige feil
Eksamenstips
Laster...