class Katalog : # Konstruktør. Leser alle destinasjonene fra fil og oppretter, # objekter som legges inn i en Dictionary med destinasjonens navn # som nøkkel: def __init__ (self, katalogfil) : self._katalogfil = katalogfil self._destKatalog = {} self._lesDestinasjonsfil(self._katalogfil) # Metode som kalles fra konstruktøren for å lese inn katalogdata # i _destKatalog. # NB: Denne skal du ikke skrive: def _lesDestinasjonsfil (self, filnavn) : pass # Metode som skriver ut navnet på alle destinasjoner i katalogen: def skrivDestListe (self) : for navn in self._destKatalog.keys(): print(navn) # Metode som skriver ut navn og informasjon om alle attraksjoner # på den oppgitte destinasjonen: def skrivEnDest (self, destNavn) : if not destNavn in self._destKatalog: print(destNavn, 'finnes ikke som destinasjon') else: self._destKatalog[destNavn].skrivDest() # Metode som legger til en ny attraksjon for en destinasjon. # Om destinasjonen ikke finnes skal metoden returnere uten å # gjøre noe: def nyAttr (self, destNavn, attrNavn,bVennlig, apenFra, apenTil) : if destNavn in self._destKatalog.keys(): ny_attr = Attraksjon(attrNavn, bVennlig, apenFra, apenTil) self._destKatalog[destNavn].leggTilAttr(ny_attr) # Metode som leser nye attraksjoner for en destinasjon fra fil. # Om destinasjon med angitt navn ikke eksisterer fra før opprettes # en ny destinasjon, ellers legges attraksjonene til den # eksisterende destinasjonen. Filformat beskrives i deloppgave h): def nyDestFraFil (self, destNavn, filnavn): # Hvis destNavn ikke finnes fra før, lager vi en ny destinasjon if not destNavn in self._destKatalog.keys(): self._destKatalog[destNavn] = Destinasjon(destNavn, []) # Leser alle linjene i filen inn i en liste av strings with open(filnavn, 'r') as f: lines = f.readlines() # Vi vet at det finnes et heltall*4 antall linjer i filen/listen. # Dvs vi kan ta av 4 og 4 linjer om gangen uten å være redd for at listen # går tom. while len(lines) > 0: navn = lines.pop(0).strip() # Fjerner mellomrom \t og \n barn = lines.pop(0).strip() fra = int(lines.pop(0)) # bruker ikke strip her fordi int() gjør det for oss til = int(lines.pop(0)) if barn == 'VOKSNE': self.nyAttr(destNavn, navn, False, fra, til) else: self.nyAttr(destNavn, navn, True, fra, til) # Metode som går gjennom alle destinasjoner, og returnerer navnet # på den destinasjonen som har flest attraksjoner som # tilfredsstiller krav som beskrevet i oppgave e): def finnBesteDest (self, barn, fra, til) : best_destnavn = '' best_ant = -1 for navn, dest in self._destKatalog.items(): aktuelle = dest.antallAktuelleAttr(barn, fra, til) if aktuelle > best_ant: best_ant = aktuelle best_destnavn = navn return best_destnavn