eksamenssett
.no
Tren målrettet
Ungdomsskole/VGS
Høyskole
Ressurser
Skolenyttig
Forum
eksamenssett
.no
Tren målrettet
Ungdomsskole/VGS
Høyskole
Ressurser
Skolenyttig
Forum
eksamenssett
.no
Tren målrettet
Ungdomsskole/VGS
Høyskole
Ressurser
Skolenyttig
Forum
IN1000
Cheat Sheet
Formler, begreper og oppsummering
Introduksjon til objektorientert programmering
eksamenssett.no
Nøkkelformler per tema
Variabler og datatyper
•
int(), float(), str() -- konvertering mellom typer
•
'1' + '2' = '12' (streng-konkatenering), int('1') + int('2') = 3 (addisjon)
•
type(variabel) -- sjekk typen til en verdi
•
True og False er boolske verdier (med stor forbokstav)
•
and, or, not -- boolske operatorer
Kontrollstrukturer
•
if betingelse: ... elif betingelse: ... else: ...
•
while betingelse: -- kjorer sa lenge betingelsen er True
•
for variabel in range(start, stopp, steg): -- itererer over tallsekvens
•
range(n) gir 0, 1, ..., n-1 (n elementer)
•
Innrykk bestemmer hvilke linjer som horer til en blokk
Funksjoner
•
def funksjonsnavn(param1, param2): -- definerer en funksjon
•
return verdi -- sender verdi tilbake til kallstedet
•
Uten return returneres None implisitt
•
Lokale variabler lever bare inne i funksjonen
•
int(input("tekst")) -- les inn heltall fra bruker
Lister og ordbøker
•
liste.append(x) -- legg til element bakerst
•
ordbok[nokkel] = verdi -- sett/oppdater verdi for nokkel
•
for k in ordbok: -- itererer over NOKLENE
•
ordbok.items() -- gir (nokkel, verdi)-par
•
x in liste / x in ordbok -- sjekk om element/nokkel finnes
Filhandtering
•
fil = open(filnavn) -- apne fil for lesing
•
for linje in fil: -- les linje for linje
•
linje.strip() -- fjern linjeskift og mellomrom i endene
•
linje.split() -- del opp i liste av ord (pa mellomrom)
•
fil.close() -- lukk filen nar du er ferdig
Klasser og objekter
•
class Navn: def __init__(self, ...): -- konstruktor
•
self._variabel -- instansvariabel (tilhorer objektet)
•
variabel uten self -- lokal, forsvinner nar metoden er ferdig
•
p2 = p1 betyr at p2 og p1 peker pa SAMME objekt
•
Underscore-prefiks (_metode) = intern/privat konvensjon
Objektorientert design
•
Ordbok av objekter: self._samling = {} der verdier er objekter
•
Delegering: self._objekt.metode() -- kall metode pa lagret objekt
•
Hjelpemetoder med underscore: self._les_fra_fil()
•
Bruk metoder fra andre klasser selv om du ikke har implementert dem
•
Konstruktoren oppretter alle instansvariabler og kaller ev. hjelpemetoder
Feilhandtering og debugging
•
NameError -- variabel ikke definert i gjeldende scope
•
TypeError -- feil type (f.eks. str + int)
•
KeyError -- nokkel finnes ikke i ordbok
•
IndexError -- indeks utenfor listens rekkevidde
•
try: ... except FeilType: ... -- fang og handter feil
Algoritmer og problemlosning
•
Tellemønster: ordbok[element] = ordbok.get(element, 0) + 1
•
Nestede lokker: for i in range(len(ytre)): for j in range(len(indre)):
•
min()/max() med nøkkelparameter for a finne storst/minst
•
all() og any() for a sjekke betingelser pa hele lister
•
enumerate(liste) gir bade indeks og element
Vanlige feil å unngå
Variabler og datatyper
•
Forveksle streng-konkatenering med talladdisjon. '1' + '2' gir '12', ikke 3.
•
Glemme at int('1' + '2') forst konkatenerer til '12' og SA konverterer til 12.
•
Prove a legge sammen streng og tall uten konvertering: 'hei' + 5 gir TypeError.
•
Glemme at boolske verdier skrives med stor forbokstav: True, ikke true.
Kontrollstrukturer
•
Glemme at elif/else hoppes over nar en tidligere betingelse er True. Bare EN gren i en if/elif/else-kjede kjorer.
•
Feil i while-lokker: glemme a oppdatere variabelen som kontrollerer lokken, noe som gir uendelig lokke.
•
Forveksle range(5) (gir 0-4) med range(1, 5) (gir 1-4). range() inkluderer IKKE stoppverdien.
•
Feil innrykk: kode som skal vaere inne i en lokke, men som er rykket ut (eller omvendt).
Funksjoner
•
Forveksle print() og return. print() viser noe pa skjermen, return sender verdien tilbake til koden som kalte funksjonen.
•
Bruke en lokal variabel fra en funksjon utenfor funksjonen -- dette gir NameError.
•
Glemme a lagre returverdien: superfunksjon(42) uten variabel foran gjor at verdien forsvinner.
•
Blande str() + int uten konvertering: 'tekst' + 42 gir TypeError. Bruk str(42).
Lister og ordbøker
•
Forveksle 'for k in ordbok' (gir noklene) med 'for v in ordbok.values()' (gir verdiene).
•
Prove a aksessere en nokkel som ikke finnes: ordbok['x'] gir KeyError. Sjekk med 'if x in ordbok' forst.
•
Glemme a initialisere en tom liste/ordbok for du bruker den i en lokke.
•
Blande listeindeks (heltall) med ordboknokkler (kan vaere strenger, tall osv.).
Filhandtering
•
Glemme strip() slik at linjeskift-tegn blir med i strengen.
•
Glemme typekonvertering: deler fra split() er alltid strenger, bruk int() for tall.
•
Bruke feil indeks etter split: husk at indeksering starter pa 0.
•
Glemme a lukke filen med close() (bruk gjerne with-blokk for sikkerhet).
Klasser og objekter
•
Glemme self foran instansvariabler: 'alder = 5' lagrer IKKE verdien pa objektet.
•
Tro at p3 = p1 lager en kopi. Det lager en NY referanse til SAMME objekt.
•
Forveksle hva __init__ gjor: den INITIALISERER objektet, den oppretter ikke klassen.
•
Glemme self som forste parameter i metodedefinisjoner.
Objektorientert design
•
Glemme a opprette alle instansvariabler i __init__. ALLE variabler som brukes i andre metoder ma initialiseres der.
•
Prove a aksessere en instansvariabel i en annen klasse direkte (obj._variabel) i stedet for a bruke en get-metode.
•
Glemme a lagre nyskapte objekter i ordboken/listen: serie = Serie(navn) uten self._serier[navn] = serie.
•
Skrive feil pa metodenavnene -- bruk NØYAKTIG de navnene oppgaven gir.
Feilhandtering og debugging
•
Anta at kode alltid kjorer uten feil. Pa eksamen er noen oppgaver designet for a gi feilmelding!
•
Forveksle NameError (variabel ikke definert) med AttributeError (attributt ikke funnet pa objekt).
•
Glemme at TypeError ogsa oppstar ved feil antall argumenter til en funksjon.
•
Ikke sjekke om en nokkel finnes i ordbok for oppslag -- bruk 'if nokkel in ordbok' forst.
Algoritmer og problemlosning
•
Glemme kanttilfeller: tom liste, liste med ett element, ordbok uten den sokte nokkelen.
•
Bruke feil sammenligningsoperator: == (likhet) vs. = (tilordning), < vs. <=.
•
Returnere for tidlig i en lokke: return inne i en for-lokke avslutter hele funksjonen, ikke bare iterasjonen.
•
Endre en liste/ordbok mens du itererer over den -- dette kan gi uventede resultater.
Eksamenstips
Variabler og datatyper
•
Del 1-oppgaver med typekonvertering kommer HVERT ar. Spor operasjonene steg for steg og skriv ned mellomverdier.
•
Nar en variabel oppdateres (tall = tall + 2), bruk alltid GJELDENDE verdi pa hoyre side.
•
Vær oppmerksom pa parenteser: int(tekst1 + tekst2) er ikke det samme som int(tekst1) + int(tekst2).
Kontrollstrukturer
•
Lag en sporingstabell med kolonner for alle variabler. Oppdater verdiene linje for linje -- dette er den sikreste metoden pa del 1.
•
For nestede lokker: skriv opp ALLE kombinasjoner av den ytre og indre variabelen systematisk.
•
Sjekk alltid om while-lokken faktisk terminerer. Spor om betingelsen NOEN gang blir False.
Funksjoner
•
Les oppgaveteksten nøye -- den sier ofte 'funksjonen skal returnere' (bruk return) vs. 'funksjonen skal skrive ut' (bruk print).
•
Du kan bruke funksjoner fra tidligere deloppgaver selv om du ikke har lost dem. Anta at de virker som beskrevet.
•
Sjekk alltid om funksjonen skal handtere tomme lister eller spesielle tilfeller.
Lister og ordbøker
•
Ordbokoppgaver i del 1: spor verdiene steg for steg. Skriv opp hele ordboken etter hver linje.
•
Del 3-oppgaver: les oppgaveteksten nøye for a finne ut om du skal returnere en liste, en ordbok, eller bare en verdi.
•
Tellemonsteret (ordbok der nokkel=element, verdi=antall) er ekstremt vanlig. Pugge dette monsteret!
Filhandtering
•
Del 4-oppgaven gir alltid et eksempel pa filformatet. Les dette NØYE og skriv opp indeksene for split()-resultatet.
•
Filinnlesing kombineres alltid med klasser. Data fra filen lagres i self._instansvariabler.
•
Noen oppgaver bruker underscore-prefiks (_les_fra_fil) for interne hjelpemetoder. Denne konvensjonen er viktig.
Klasser og objekter
•
Del 2-flervalg: tegn opp objektene som bokser og referansene som piler. Spor hvilke self._variabler som finnes pa hvert objekt.
•
Nar koden mangler 'self' foran en variabel i __init__, er det med vilje -- det betyr at verdien IKKE lagres pa objektet.
•
Referanseoppgaver: husk at tilordning til en variabel (p3 = noe_nytt) IKKE pavirker andre variabler som pekte pa det gamle objektet.
Objektorientert design
•
Les hele oppgave 4 for du begynner. Forstå sammenhengen mellom klassene for du skriver kode.
•
Begynn med deloppgave a) og b) (konstruktorer) -- disse er lettest og gir sikre poeng.
•
Du far poeng for riktig struktur selv om detaljene ikke er perfekte. Vis at du forstar prinsippene.
•
Oppgaven sier eksplisitt at du kan bruke metoder fra tidligere deloppgaver uten a ha implementert dem.
Feilhandtering og debugging
•
Nar et flervalgsalternativ er 'Man far en feilmelding', sjekk nøye om alle variabler er definert og om typene passer.
•
Instansvariabler uten self i __init__ er en BEVISST felle i del 2. Les koden ekstra nøye.
•
Bruk sporingstabeller pa papir for ALLE kodelesingoppgaver. Det tar litt tid, men gir sikre poeng.
Algoritmer og problemlosning
•
Del 3: Les eksemplene fra oppgaveteksten og sjekk at losningen din gir riktig svar for disse.
•
Del 5 er vanskelig og gir fa poeng. Prioriter del 4 (50 poeng) hvis du har darlig tid.
•
Selv en ufullstendig losning gir delpoeng. Skriv sa mye du kan, og kommenter hva du hadde tenkt a gjore.
•
Bruk hjelpefunksjoner! Hvis du trenger a gjore noe to ganger, skriv en egen funksjon for det.
IN1000 Formelark | Eksamenssett