Eksamenstrening
Noen av oppgavene under er inspirert fra tidligere eksamensoppgaver.
Oppgave 1: Nest st?rst
Skriv en funksjon nest_st?rst
som tar 4 ulike tall som argumenter og returnerer det tallet som er nest st?rst.
Vanskelig ekstraoppgave: La funksjonen ta en liste med tall (ubestemt antall) og et argument (int) som spesifiserer tallet som skal returneres (0 betyr h?yeste tall, 1 er nest h?yeste tall, 2 er det tredje h?yeste tallet osv). Det er ikke lov ? bruke sort
.
Oppgave 2: Finn feilen
Hva er feil i koden her? Rett opp feilen slik at funksjonen gj?r det den skal.
def alle_tall_er_ulike(tall):
assert type(tall) == list
sjekket = []
for t in tall:
if t not in sjekket:
alle_er_unike = True
else:
alle_er_unike = False
sjekket.append(t)
return alle_er_unike
Oppgave 4: Datastrukturtegning
Tegn en datastrukturtegning som kan passe til programkoden under.
Implementer deretter klassene Rom
og Bygning
og sjekk at testen passerer.
bygning = Bygning("Ifi")
bygning.legg_til_rom(Rom("CAML", antall_plasser=72))
bygning.legg_til_rom(Rom("AWK", antall_plasser=16))
assert bygning.finn_storste_rom().hent_navn() == "CAML"
Oppgave 5: Forenkle kode
Gj?r f?lgende kode mer lesbar og enklere ved ? introdusere prosedyrer/funksjoner:
# Programmet skal lese navn og alder fra 3 ulike filer og printe navnene sortert
alle_navn = []
f = open("navn1.txt")
for line in f:
navn = line.strip()
alle_navn.append(navn)
f = open("navn2.txt")
for line in f:
navn = line.strip()
alle_navn.append(navn)
f = open("andre_navn.txt")
for line in f:
navn = line.strip()
alle_navn.append(navn)
print('\n'.join(sorted(alle_navn)))
Oppgave 6
Skriv en funksjon velg_gave
som tar to argumenter mulige_gaver
og onskeliste
. Funksjonen skal fors?ke ? finne en gave blant mulige_gaver
som er p? ?nskelisten og returnere den gaven. Hvis det ikke finnes noen match skal en hvilken som helst gave returneres.
Vanskelige mer ?pne oppgaver
Oppgave 7: Menn og kvinner
P? et rart ?ysamfunn har beboerne bestemt seg for at de ?nsker st?rre andel jenter, og lager derfor f?lgende regel:
- Hvis et par f?der et jentebarn, skal de ikke f? lov til ? f? flere barn etter det
- Hvis f?rstef?dte ikke var jente, er det greit ? pr?ve igjen fram til man har f?tt maks 4 barn, men s? snart et av barna er jente skal man stoppe.
Eksempel:
- Et par f?der f?rst en gutt, og fortsetter derfor ? f? barn
- Neste gang f?der de en gutt igjen
- Tredje gang f?der de en jente, og f?r derfor ikke f? flere barn
Vil det p? sikt bli flere jenter enn gutter p? denne ?ya? Eller omvendt? Vi antar 50/50 sannsynlighet for ? f? jente/gutt. Skriv kode som simulerer scenarioet. Man kan anta at det finnes et visst antall par som genererer barn, og at barna ikke f?r barn videre osv.
Oppgave 8: Birthday paradox
Det sies at i skoleklasser er det mer vanlig at det finnes to personer som har bursdag p? samme dag enn at det ikke gj?r det (birthday paradox).
Vi antar at en skoleklasse best?r av 30 elever, og at det er 365 dager i ?ret. Simuler noen tusen skoleklasser og avgj?r om det ser ut til at p?standen stemmer eller ikke.
Oppgave 9: Fibonacci
Anta at vi lever i en verden der kaniner aldri d?r. Alle kaniner som er 2 ?r eller eldre vil alltid f? 1 barn hvert ?r (vi ignorerer kj?nn og par osv).
Anta at vi starter med 2 nyf?dte baby-kaniner. Det f?rste ?ret skjer ingenting, men det andre ?ret vil disse generere to barn. ?ret etter vil de to barna selv ikke generere avkom, mens foreldrene vil fortsette. ?ret etter vil de f?rste avkommene v?re gamle nok til ? generere barn. Dette blir fort komplisert, men vi kan skrive kode for ? holde orden p? hvem som f?r barn n?r.
Lag en klasse Kanin
som har en alder og en klasse Verden
som holder orden p? kaninene og s?rger for at riktige kaniner skal generere barn hvert ?r. Hvor mange kaniner vil det v?re etter X antall ?r?