from hotell import Hotell class Reservasjonssystem: def __init__(self, hotellnavn_liste): self._hotell_ordbok = dict() # eller {} for hotellnavn in hotellnavn_liste: self._hotell_ordbok[hotellnavn] = Hotell(hotellnavn) def reserver_rom_i_hotell(self, hotellnavn, rom_nr, gjestenavn_liste): self._hotell_ordbok[hotellnavn].reserver_rom(rom_nr, gjestenavn_liste) def _finn_alle_passende_rom(self, krevde_fasiliteter): alle_passende_rom = dict() # eller {} for hotellnavn in self._hotell_ordbok: hotell = self._hotell_ordbok[hotellnavn] passende_rom_her = hotell.finn_passende_rom(krevde_fasiliteter) if len(passende_rom_her) > 0: alle_passende_rom[hotellnavn] = passende_rom_her return alle_passende_rom # Lengre kommentarer her enn jeg syns det bør være i normal kode, # men det er siden jeg ikke rakk å gå gjennom dette i timen. def gruppe_reservasjon(self, gruppe): alle_passende_rom = self._finn_alle_passende_rom(gruppe.hent_krav()) bekreftelse = [] if len(alle_passende_rom) == 0: # Kunne like godt returnert ["Ingen passende rom"], men # jeg foretrekker å returnere selve `bekreftelse`. # Gjør det tydelig at det er samme bekreftelse vi # snakker om, ikke en tilfeldig liste. bekreftelse.append("Ingen passende rom") return bekreftelse gjester = gruppe.hent_personer() neste_gjest = 0 for hotellnavn in alle_passende_rom: passende_rom_her = alle_passende_rom[hotellnavn] for rom in passende_rom_her: gjester_igjen = len(gjester) - neste_gjest # Slik jeg forstår koden, skal dette alltid være sant. assert gjester_igjen >= 0 # "stopper" løkkene og returnerer, så snart/hvis # vi har plassert alle. Uten dette blir rom videre # reservert ved feil etter alle gjester er plassert if gjester_igjen == 0: return bekreftelse gjester_hit = [] ant_senger = rom.hent_ant_senger() # min(a,b) gir det mindre tallet blant de to. # Jeg tenker slik: # Vi legger en gjest til rommet for hver tilgjengelig # seng, eller hvis det er færre gjester igjen # enn senger, så for hver gjest som er igjen. for i in range(min(ant_senger, gjester_igjen)): gjester_hit.append(gjester[neste_gjest]) neste_gjest+=1 rom.reserver(gjester_hit) # vi har implementert __str__ på Rom-klassen bekreftelse.append("Booket rom: "+str(rom)+" på: "+str(hotellnavn)) gjester_igjen = len(gjester) - neste_gjest if gjester_igjen > 0: bekreftelse.append("Advarsel: "+str(gjester_igjen)+" personer fikk ikke plass") return bekreftelse