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: Klassediagrammer

Skriv kode som gj?r at klassediagrammet (vi tegner p? tavla) stemmer og slik at f?lgende assert fungerer:

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:

Eksempel:

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?