# Mange mulige løsninger på disse, viktigst at de svarer korrekt på oppgaven # Vi trekker ikke for "uelegante" løsninger, men vi trekker for # manglende håndtering av spesialtilfeller, returverdi med feil type o.l. # Når det er brukt ferdige funksjoner (zfill, rstrip) gis full pott hvis 100% korrekt, # men ved feil er det da færre poeng å hente på enkeltelementer (som korrekte løkker). # Bruk skjønn etter en helhetsvurdering iht veiledningen ved varianter/ kombinasjoner. # Oppgave 3a (6 poeng) # 4 poeng for helt riktig logikk # 2 poeng for helhet (parametere, retur, typer) def fridager(julaften): antFridager = 4 if julaften == "torsdag" or julaften == "lordag": antFridager -= 1 elif julaften == "fredag": antFridager -= 2 return antFridager # Oppgave 3b (5 poeng) # 1 poeng for inngangsverdi fra bruker (ikke f eks "") # 3 poeng for while-løkke med korrekt test (-2p for break) # 1 poeng for helhet/ løser oppgaven inkl return def beOmNavn(navneliste): navn = input("Skriv navn: ") while navn not in navneliste: navn = input("Navnet du oppga er ikke kjent. Skriv navn: ") return navn # Oppgave 3c (6 poeng) # 6 poeng for korrekt løsning for alle assert (uansett fremgangsmåte) # Ved lengde>antall gis også full uttelling om strengen kuttes (selv om # det betyr at assert feiler i denne deloppgaven) # Ved mangler/ feil: # + 1 poeng for konvertering int til streng # + 2 poeng for korrekt løkketest (i løsning uten zfill) # + 2 for korrekt konkatenering med "0" (evt med zfill/ slice) # + 1 for korrekt retur (sted og verdi, type) # (V/ feil belønnes riktige løkketest i "manuell" løsning/ variant 1) def intTilString(tall, antallSiffer): # Variant 1 streng = str(tall) while len(streng) < antallSiffer: streng = "0" + streng return streng def intTilString(tall, antallSiffer): # Variant 2 streng = str(tall) return streng.zfill(antallSiffer) assert intTilString(87, 4) == "0087" assert intTilString(87, 2) == "87" assert intTilString(87, 1) == "87" assert intTilString(1,11) == "00000000001" assert intTilString(0, 2) == "00" assert intTilString(0, 0) == "0" # Oppgave 3d (7 poeng) # 7 poeng for korrekt løsning for alle assert (uansett fremgangsmåte) # Ved mangler/ feil: # + 3 poeng for iterering bakfra for å finne antall "!" # + 2 for korrekt fjerning av "!" (evt med slice, rstrip, ...) # + 2 for resten/ helhet inkl korrekt innlegging av "." def dempDeg (tekst): # Variant 1 (kjernepensum) tegnNr = len(tekst)-1 while tegnNr>=0 and tekst[tegnNr] == "!": tegnNr -= 1 if tegnNr < len(tekst)-1: nyTekst = "" for i in range(0, tegnNr+1): nyTekst += tekst[i] nyTekst += "." else: nyTekst = tekst return nyTekst def dempDeg (tekst): # Variant 2 tegnNr = len(tekst)-1 while tegnNr>=0 and tekst[tegnNr] == "!": tegnNr -= 1 nyTekst = tekst[0:tegnNr+1] if nyTekst != tekst: nyTekst += "." return nyTekst def dempDeg(tekst): # Variant 3 nyTekst = tekst.rstrip("!") if len(nyTekst) < len(tekst): nyTekst = nyTekst + "." return nyTekst assert(dempDeg("abcde!!!")) == "abcde." assert(dempDeg("!!")) == "." assert(dempDeg("!abscde f!")) =="!abscde f." assert(dempDeg("")) == "" # Oppgave 5 (5 poeng) # 4 poeng for korrekt løsning i forhold til oppgavetekst (krever ikke samme rekkefølge) # + 1 poeng for løsning i forhold til assert-setninger (beholder rekkefølgen) # Ved feil/ mangler: # + 3 poeng for logikk # + 1 poeng for riktig håndtering av nøstede lister # + 1 poeng for riktig håndtering av ordbok med lister def lagSynonymordbok(listeAvLister): ordbok = {} for liste in listeAvLister : for synonym in liste: nyliste = [] for ord in liste: if synonym != ord: nyliste.append(ord) if synonym not in ordbok: ordbok[synonym] = [] ordbok[synonym].append(nyliste) return ordbok # test med asserts synonymer = [ ["a", "e", "i", "o", "u"], \ ["HOM", "c", "d"], \ ["y", "HOM"], \ ["k", "l", "m", "n", "p", "q"], \ ["x"] ] # Ordet "HOM" (homonym) har i én betydning synonymene "c" og "d", # i en annen betydning har "HOM" synonymet "y" synonymordbok = lagSynonymordbok(synonymer) assert synonymordbok["e"] == [ ["a", "i", "o", "u"] ] assert synonymordbok["a"] == [ ["e", "i", "o", "u"] ] assert synonymordbok["u"] == [ ["a", "e", "i", "o"] ] assert synonymordbok["c"] == [ ["HOM", "d"] ] assert synonymordbok["HOM"] == [ ["c", "d"], ["y"] ] assert synonymordbok["x"] == [ [] ]