God oversikt over pensum med forklaringer, formler, vanlige feil og eksamenstips.
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 pa numeriske metoder, plotting og vitenskapelig databehandling. Eksamen er skriftlig (4 timer) uten hjelpemidler, og bestar 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 bade evnen til a lese og forsta kode (trace gjennom programmer mentalt) og a skrive kode fra bunnen av. De forste 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, filhandtering med ordbeker, eller differensiallikninger/ODE-losere.
Sentralt tips: Ov pa a trace kode for hand -- forstall hva for-lokker, while-lokker og list comprehensions produserer uten a kjore koden. Dette utgjor 20-30 % av poengene og er ren oving. De store oppgavene folger faste monstre (Forward Euler, fillesing til dict, klasse med __call__) som du kan drille pa 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 forste 5-7 oppgavene pa eksamen. Disse er typisk flervalgsoppgaver der du ma trace gjennom kort kode og bestemme hva som skrives ut. Du ma ha fullstendig kontroll pa hvordan variabler, lokker, lister og funksjoner fungerer i Python. I tillegg brukes grunnleggende Python-kunnskap i alle de storre oppgavene, sa dette er det aller viktigste temaet a 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 a markere blokker. Husk at elif bare evalueres dersom forrige betingelse var False. Du kan kjede flere elif-grener, men bare den forste som matcher kjores.
for-lokker: for i in range(n) gir verdiene 0, 1, ..., n-1. range(a, b) gir a, a+1, ..., b-1. range(a, b, step) gar med angitt steglengde. Du kan ogsa iterere direkte over lister: for x in my_list. Nesta for-lokker er vanlige pa eksamen -- den indre lokken kjorer helt ferdig for hver iterasjon av den ytre.
while-lokker: Kjorer sa lenge betingelsen er True. Betingelsen sjekkes for starten av hver iterasjon, ikke underveis. Pa eksamen brukes disse ofte i oppgaver der du ma telle antall iterasjoner eller finne sluttverdien av en variabel. Typisk mote: to variabler som oppdateres i lokken, der du ma holde styr pa 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 nar du trenger a sende en enkel funksjon som argument, f.eks. til numerisk derivasjon.
Lister er mutbare sekvenser. Viktige operasjoner: append() legger til pa 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 a bygge lister: [x**2 for x in range(5)] gir [0, 1, 4, 9, 16]. Du kan ogsa 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 a operere pa 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 pa 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. Pa eksamen brukes dette i oppgaver med zip og list comprehensions for a 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])
Losning: 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
Losning: 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). Nar 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...