eksamenssett
.no
Tren målrettet
Ungdomsskole/VGS
Høyskole
Ressurser
Privatundervisning
Kontakt
eksamenssett
.no
Tren målrettet
Ungdomsskole/VGS
Høyskole
Ressurser
Privatundervisning
Kontakt
eksamenssett
.no
Tren målrettet
Ungdomsskole/VGS
Høyskole
Ressurser
Privatundervisning
Kontakt
IN1000
Cheat Sheet
Formler, begreper og oppsummering
Introduksjon til objektorientert programmering
eksamenssett.no
Nøkkelformler per tema
Variabler og datatyper
•
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
Kontrollstrukturer
•
for e in liste — verdiene; for i in range(len(liste)) — indeksene
•
range(start, stopp, steg) — stopp er aldri med
•
while betingelse: — kjører så lenge betingelsen er sann
•
continue — hopp til neste runde; break — avslutt løkka
•
t % 2 == 0 — test for partall
Funksjoner
•
def navn(parametre): — definisjon
•
return verdi — avslutter funksjonen og gir svaret
•
Uten return returneres None
•
liste[i] = x endrer kallerens liste; liste = [...] gjør det ikke
Vanlige feil å unngå
Variabler og datatyper
•
Å 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".
Kontrollstrukturer
•
Å tro at både if- og elif-grenen kjører.
•
Å bruke if i stedet for while ved «spør inntil gyldig verdi».
•
Å bare teste den ene grensen ved validering av indeks.
•
Å bytte om rekkefølgen på tilordningene inne i en while-løkke.
Funksjoner
•
Å bruke print der oppgaven ber om return.
•
Å skrive else: return True inne i løkka i stedet for etter den.
•
Å tro at tilordning til en parameter endrer kallerens variabel.
•
Å skrive logikken på nytt i stedet for å kalle den oppgitte hjelpefunksjonen.
Lister og ordbøker
Eksamenstips
Variabler og datatyper
•
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.
Kontrollstrukturer
•
Sjekk alltid om det står elif eller to separate if — svaret blir ulikt.
•
range(n) går til og med n-1. Test alltid første og siste verdi løkka produserer.
•
Validering: les én gang før while, og les på nytt nederst i løkka.
•
Ved nøstet løkke: spor med én rad per verdi av den ytre variabelen.
Funksjoner
•
«Returnerer» betyr return, «skriver ut» betyr print. Les oppgaveteksten ordrett.
•
Bruk eksempelkallene i oppgaven som assert-tester mens du skriver.
•
Du SKAL bruke funksjoner fra tidligere deloppgaver, også de du ikke rakk å skrive.
•
Ja/nei-funksjoner: return False ved første motbevis, return True etter løkka.
•
assert funksjon(arg) == fasit — gratis egentest
Lister og ordbøker
•
liste.append(x) / liste.insert(i, x) / liste.remove(x) / liste.pop()
•
liste[a:b] — utsnitt; liste[-1] — siste element
•
ordbok[nøkkel] = verdi — legger inn eller endrer
•
x in liste / x in ordbok — ordbok tester nøkler
•
if e not in d: d[e] = 0 → deretter d[e] += 1
Filhåndtering
•
fil = open(fn) … fil.close() — lesing
•
for linje in fil: → linje.strip() → linje.split()
•
open(fn, "w") tømmer filen; open(fn, "a") legger til bakerst
•
ut.write(str(x) + "\n") — write tar bare strenger og gir ikke linjeskift
•
fil.readline() — én linje; tom streng betyr slutt på filen
Klasser og objekter
•
class Navn: — klassedefinisjon
•
def __init__(self, ...): — konstruktør
•
self._variabel — non-public instansvariabel
•
def __str__(self): return ... — utskriftsform
•
b = a kopierer referansen, ikke objektet
Objektorientert design
•
self._objekter = {} — ordbok med navn som nøkkel, objekt som verdi
•
if navn not in self._d: self._d[navn] = Klasse(navn) — unngå duplikater
•
return None når ett objekt ikke finnes; return [] når ingen i en samling passer
•
beste = None + «if beste is None or ...» — trygg «beste hittil»
•
annet_objekt.metode(...) — delegering framfor direkte variabellesing
Kodeforståelse og feilsøking
•
NameError — navnet finnes ikke
•
TypeError — feil typer i samme operasjon
•
IndexError — indeks utenfor listen
•
KeyError — nøkkelen finnes ikke i ordboken
•
assert uttrykk — stille når sant, AssertionError når usant
•
liste = liste.append(x) gjør lista til None.
•
Oppslag på nøkkel som ikke finnes gir KeyError.
•
Å glemme initialiseringen før += 1 eller append.
•
Å tro at len() på en nøstet liste gir antall elementer totalt.
Filhåndtering
•
Å glemme strip(), slik at tomme linjer ikke oppdages.
•
Å glemme int() på tall fra fil.
•
Å åpne med "w" når man mente "a" — filen tømmes umiddelbart.
•
Å glemme fil.close() slik at siste linjer mangler når filen leses igjen.
Klasser og objekter
•
Å glemme self som første parameter: TypeError om antall argumenter.
•
Å skrive variabel = verdi uten self. i konstruktøren: AttributeError senere.
•
Å tro at to objekter med samme innhold er samme objekt.
•
Å lese objekt._variabel utenfra i stedet for å kalle en hent-metode.
Objektorientert design
•
Å glemme å registrere at en ressurs er opptatt etter tildeling.
•
Å lese objekt._variabel fra en annen klasse i stedet for å kalle en metode.
•
Å finne på egne klasse- og metodenavn.
•
Å velge feil startverdi (0 kontra None) for «beste hittil».
Kodeforståelse og feilsøking
•
Å gjette svaret i stedet for å spore linje for linje.
•
Å overse at løkkevariabelen aldri brukes i løkkekroppen.
•
Å tro at et program uten feilmelding er riktig — logiske feil er stille.
•
Å svare 10 der utskriften faktisk blir 10.0.
Lister og ordbøker
•
for n in ordbok gir nøklene — verdien får du med ordbok[n].
•
Opptelling bruker startverdi 0, gruppering bruker startverdi [].
•
Naboparmønsteret (start på indeks 1) løser «er sortert» og «henger ruten sammen».
•
IN1000 trenger verken list comprehension, lambda eller sorted(key=...).
Filhåndtering
•
IN1000 bruker ikke with-blokk og ikke csv-modulen — bare open/close.
•
strip() før du tester på tom linje, ellers er linja "\n" og ikke "".
•
int() på alt fra fil som skal regnes med — feilen dukker opp langt unna årsaken.
•
På eksamen ligger fillesingen i en hjelpemetode som konstruktøren kaller.
Klasser og objekter
•
Tegn objekter som bokser og variabler som piler før du svarer på Del 2.
•
Uten self. er variabelen lokal og forsvinner når metoden er ferdig.
•
self._x.metode() endrer objektet; self._x = ... endrer hvem vi peker på.
•
Arv, super() og polymorfisme er IKKE pensum i IN1000.
Objektorientert design
•
Les HELE oppgave 4 før du begynner å skrive — deloppgavene bygger på hverandre.
•
Bygg nedenfra: enkleste klasse først, systemklassen sist.
•
Bruk de oppgitte klasse- og metodenavnene, og kommenter egne tillegg kort.
•
Sett av minst halvparten av eksamenstiden til denne oppgaven.
Kodeforståelse og feilsøking
•
Lag alltid sporingstabell — det er den eneste sikre metoden under tidspress.
•
Koble feilmeldingens navn til årsaken: NameError, TypeError, IndexError, KeyError.
•
Logiske feil finnes bare ved å teste grensetilfellene.
•
«Fyll inn»-oppgaver: arbeid baklengs og kontroller mot alle eksemplene.