# Poengfordeling per deloppgave endres ikke # Bruk skj?nn i fordeling p? aspekt, evt p? tvers av deloppgaver # Eksempler p? momenter ? vurdere/ sjekke per deloppgave (ikke komplett) # Begrenset trekk for misforst?else av oppgaver ved ellers god kode # 4a) 6 poeng # 2p DEF: parametere, non-public instansvariabler, tom ordbok etc # 2p PRO: legger til riktig i se_en_episode # 2p OO: resten class Abonnent: def __init__(self, ab_navn, pref): self._ab_navn = ab_navn self._preferanser = pref self._p?begynt = {} def hent_preferanser(self): return self._preferanser def sjekk_om_sett(self, serienavn): return serienavn in self._p?begynt def se_en_episode(self, serienavn): if serienavn in self._p?begynt: self._p?begynt[serienavn] += 1 else: self._p?begynt[serienavn] = 1 # 4b) 4 poeng # 2p DEF: parameter, non-public, tomme ordb?ker, self etc # 2p OO: kall p? _les_fra_fil class Serie: def __init__(self, serienavn): self._serienavn = serienavn self._episoder = {} self._serietager = {} self._les_fra_fil() # 4c) 10 poeng # 3p PRO: filh?ndtering # 2p PRO: ordb?ker mm # 5p OO: bruker og oppdaterer instansvariabler, gen oo def _les_fra_fil(self): fil = open(self._serienavn+".txt", "r") for linje in fil: tager = linje.strip().split() for tag in tager: if tag not in self._serietager: self._serietager[tag] = 1 else: self._serietager[tag] += 1 self._episoder[len(self._episoder)+1] = tager fil.close() def hent_serietager(self): serietag_liste = [] for tag in self._serietager: serietag_liste.append(tag) return serietag_liste # 4f) 5 poeng # 3p PRO: Beregner match iht krav (+ el -) # 2p OO: Bruker self._serietager def beregn_match(self, preferanser): match = 0 for tag in preferanser: if tag in self._serietager: match += self._serietager[tag]*preferanser[tag] return match # 4d) 10 poeng # 2p DEF: Kun oppgitte instansvariabler m/ tomme lister/ ordb?ker # 3p PRO: Ordb?ker/ lister, legger kun til nye tager # 5p OO: Oppretter og legger til Serie-objekter, kaller hent_serietager class Tjeneste: def __init__(self, serienavn): self._serier = {} self._tager_i_bruk = [] self._abonnenter = {} for navn in serienavn: ny_serie = Serie(navn) self._serier[navn] = ny_serie tager = ny_serie.hent_serietager() for tag in tager: if tag not in self._tager_i_bruk: self._tager_i_bruk.append(tag) # 4e) 10 poeng # 2p PRO: Sjekker input, konverterer, ekskluderer '0' # 3p PRO: Bygger opp fungerende preferanser-ordbok # 2p OO: Bruker instansvariabelen for alle tjenestens tager # 3p OO: Oppretter og plasserer Abonnent korrekt def ny_abonnent(self): navn = input("Oppgi abonnent-navn: ") preferanser = {} print("Oppgi preferanser for en og en tag: 1 (liker), 0 (n?ytral) eller -1 (misliker).") for tag in self._tager_i_bruk: pref = input(tag + ": ") while pref not in ["-1", "0", "1"]: print ("Ulovlig verdi!") pref = input(tag + ": ") if pref != "0": preferanser[tag] = int(pref) self._abonnenter[navn] = Abonnent(navn, preferanser) # 4g) 5 poeng # 1p PRO: Korrekt utskrift # 4p OO: Bruk av instansvariabler og -metoder def foresl?_serier(self, ab_navn): ab = self._abonnenter[ab_navn] forslag = [] for serienavn in self._serier: serie = self._serier[serienavn] match = serie.beregn_match(ab.hent_preferanser()) if not ab.sjekk_om_sett(serienavn) and match > 0: forslag.append(serienavn) if len(forslag) == 0: print("Ingen serier kan anbefales for " + ab_navn + ".") else: print("Forslag til serier for " + ab_navn + " :") for snavn in forslag: print(snavn)