class Abonnent: def __init__(self, abonnentnavn, preferanser): self._abonnentnavn = abonnentnavn self._preferanser = preferanser self._påbegynte_serier = {} # { serienavn : sist sette episodenr } def hent_preferanser(self): return self._preferanser def sjekk_om_sett(self, serienavn): if serienavn in self._påbegynte_serier: return True return False def se_en_episode(self, serienavn): if serienavn in self._påbegynte_serier: self._påbegynte_serier[serienavn] += 1 else: self._påbegynte_serier[serienavn] = 1 class Serie: def __init__(self, serienavn): self._serienavn = serienavn self._episoder = {} # { episodenummer : [tags]} self._tags = {} # { tag : antall episoder med taggen } self._les_fra_fil() def _les_fra_fil(self): fil = open(self._serienavn + ".txt", "r") episode_nr = 1 for linje in fil: deler = linje.strip().split() # ["thriller", "action", "drama"] self._episoder[episode_nr] = deler for tag in deler: if tag in self._tags: self._tags[tag] += 1 else: self._tags[tag] = 1 episode_nr += 1 fil.close() def hent_serietags(self): tags = [] for tag in self._tags: tags.append(tag) return tags def beregn_match(self, preferanser): liker = 0 misliker = 0 for tag in self.hent_serietags(): if tag in preferanser: if preferanser[tag] == -1: misliker += self._tags[tag] elif preferanser[tag] == 1: liker += self._tags[tag] return liker - misliker class Tjeneste: def __init__(self, serienavn): self._serier = {} # { serienavn : Serie-objekt } self._tags = [] self._abonnenter = {} # { abonnentnavn : Abonnent-objekt } for navn in serienavn: serie = Serie(navn) self._serier[navn] = serie for tag in serie.hent_serietags(): if tag not in self._tags: self._tags.append(tag) def ny_abonnent(self): navn = input("Hva er navnet ditt? ") preferanser = {} for tag in self._tags: pref = int(input("Liker du " + tag + " ? (-1 / 0 / 1): ")) while pref > 1 or pref < -1: print("Ugyldig preferanseverdi") pref = int(input("Liker du " + tag + " ? (-1 / 0 / 1): ")) if pref != 0: preferanser[tag] = pref self._abonnenter[navn] = Abonnent(navn, preferanser) def foreslå_serie(self, abonnentnavn): forslag = [] abonnent = self._abonnenter[abonnentnavn] preferanser = abonnent.hent_preferanser() for navn in self._serier: serie = self._serier[navn] if serie.beregn_match(preferanser) > 0 and not abonnent.sjekk_om_sett(serie): forslag.append(navn) if len(forslag) == 0: print("Tjenesten tilbyr ingen serier som brukeren vil like.") else: print(forslag)