# Det ligger ogs? l?sningsforslag ute p? semestersiden der deler av # oppgaven er l?st p? en annen m?te, s? ta gjerne en titt p? det ogs?! class Gruppe: def __init__(self, krav): self._krav = krav self._personer = [] def legg_til_personer(self, personnavn): self._personer += personnavn """ Eventuelt for person in personnavn: self._personer.append(person) """ def hent_personer(self): return self._personer def hent_krav(self): return self._krav class Rom: def __init__(self, romnummer, ant_senger, fasiliteter): self._romnummer = romnummer self._ant_senger = ant_senger self._fasiliteter = fasiliteter self._gjester = [] def reserver(self, gjester): self._gjester = gjester def hent_ant_senger(self): return self._ant_senger def passer(self, krav_liste): # Sjekker f?rst om rommet er ledig if len(self._gjester) > 0: return False # Itererer over kravene og sjekker om rommet (ikke) har dem for krav in krav_liste: if krav not in self._fasiliteter: return False return True # Magisk metode som definerer hvordan objektet skrives ut def __str__(self): return f"{self._romnummer} - Antall senger: {self._ant_senger} \nFasiliteter: {self._fasiliteter}" class Hotell: def __init__(self, hotellnavn): self._hotellnavn = hotellnavn self._hotellrom = self._les_fil(hotellnavn) # Bruker en hjelpemetode for ? lage ordboken med rom # Hjelpemetode def _les_fil(self, hotellnavn): rom_ordbok = {} fil = open(hotellnavn + ".txt") for linje in fil: deler = linje.strip().split() romnr = int(deler.pop(0)) # Bruker pop() som fjerner og returnerer element p? gitt indeks (her f?rste element) ant_senger = int(deler.pop(0)) # Samme som over, igjen f?rste element siden romnr ble fjernet fasiliteter = deler # Resten av deler-listen vil v?re eventuelle fasiliteter rom_ordbok[romnr] = Rom(romnr, ant_senger, fasiliteter) fil.close() # Husk ? lukke fil:) return rom_ordbok def reserver_rom(self, romnr, gjester): self._hotellrom[romnr].reserver(gjester) def finn_passende_rom(self, krav): passende_rom = [] for rom in self._hotellrom.values(): # Itererer over verdiene siden romnr er n?kkel og Rom-objekt er verdi if rom.passer(krav): passende_rom.append(rom) return passende_rom class Reservasjonssystem: def __init__(self, hotelliste): self._hoteller = {} for hotellnavn in hotelliste: self._hoteller[hotellnavn] = Hotell(hotellnavn) def reserver_rom_i_hotell(self, hotellnavn, romnr, gjester): self._hoteller[hotellnavn].reserver_rom(romnr, gjester) # Hjelpemetode def _finn_alle_passende_rom(self, krav): passende_rom = {} for hotellnavn in self._hoteller: rom_liste = self._hoteller[hotellnavn].finn_passende_rom(krav) # Legger det kun inn i ordboken hvis det var noen ledige rom if len(rom_liste) > 0: passende_rom[hotellnavn] = rom_liste return passende_rom def gruppe_reservasjon(self, gruppe): personer = gruppe.hent_personer() krav = gruppe.hent_krav() passende_rom = self._finn_alle_passende_rom(krav) # Kaller p? hjelpemetode # Hvis det ikke er noen ledige rom if len(passende_rom) == 0: return ["Ingen passende rom"] # Liste som skal returneres bekreftelse = ["Bekreftelse p? bestilling", "Reserverte rom:"] # Itererer over alle passende rom for hotellnavn in passende_rom: for rom in passende_rom[hotellnavn]: gjester = [] # S? lenge det er personer som ikke har f?tt rom og det er ledig plass p? rommet while len(personer) > 0 and len(gjester) < rom.hent_ant_senger(): gjester.append(personer.pop(0)) # Legger til f?rste person i gjeste-listen og fjerner dem fra listen over personer rom.reserver(gjester) # Legger til en tekststreng med hotell, info om rommet og gjester til listen som skal returneres bekreftelse.append(f"{hotellnavn}: {rom} \nGjester: {gjester} \n") # FYI! Gjester er ikke en del av oppgaven og derfor ikke n?dvendig! # Returnerer bekreftelse hvis alle personene har f?tt rom if len(personer) == 0: return bekreftelse # Legger til en streng med de personene som ikke fikk rom og returnerer ant_mangler = len(personer) bekreftelse.append(f"NB: Mangler rom til {ant_mangler} personer: {personer}") # FYI! Det er bare ? legge til antall som er en del av oppgaven (trenger ikke skrive ut personene ogs?) return bekreftelse