# 4a) 10 poeng # Konstrukt?r: 2p # Metodene passer og valgt: 5p # Metode __str__: 3p class Onske: def __init__(self, beskrivelse, antall, min_pris): self._beskrivelse = beskrivelse self._antall = antall self._min_pris = min_pris def passer(self, max_pris): return self._antall > 0 and self._min_pris<=max_pris def valgt(self): self._antall -= 1 return self._beskrivelse def __str__(self): s = self._beskrivelse + " Pris: " + str(self._min_pris) return s # 4b) 10 poeng # Konstrukt?r: 1p # Andre metoder: 9p class Onskeliste: def __init__(self): self._onsker = [] def nytt_onske(self, beskrivelse, antall, min_pris): nytt = Onske(beskrivelse, antall, min_pris) self._onsker.append(nytt) def hent_onsker(self, max_pris): alle_onsker = [] # strenger m beskrivelse og pris for passende oensker for onske in self._onsker: if onske.passer(max_pris): # metode passer sjekker pris og antall gjenvaerende alle_onsker.append(str(onske)) # gjoer om oensket til en streng else: alle_onsker.append("Ikke valgbart alternativ") return alle_onsker def onske_oppfylles(self, onske_nr): return self._onsker[onske_nr].valgt() # 4c) 5 poeng # Konstrukt?r: 2p # __str__: 3p class Gave: def __init__(self, beskrivelse, giver): self._beskrivelse = beskrivelse self._giver = giver def __str__(self): return "I dag har " + self._giver + " gitt deg: " + self._beskrivelse # 4d) 10 poeng # Konstrukt?r: 5p # Andre metoder: 5p class Juleferiekalender: def __init__(self, ant_dager): self._gaver = {} # Noekkel: dato-dag i desember/ januar, verdi: gave-ref dag_nr = 25 for teller in range(ant_dager): self._gaver[dag_nr] = None dag_nr += 1 if dag_nr == 32: dag_nr = 1 def ny_gave(self, beskrivelse, giver, dag_nr): self._gaver[dag_nr] = Gave(beskrivelse, giver) def hent_dagens_gave(self, dag_nr): mnd_tekst = ". desember" if dag_nr < 25: mnd_tekst = ". januar" gave_tekst = "" if self._gaver[dag_nr] is None: gave_tekst = "Desverre ingen gave i dag" else: gave_tekst = str(self._gaver[dag_nr]) return str(dag_nr) + mnd_tekst + ": " + gave_tekst def hent_ant_dager(self): return len(self._gaver) # 4e) 7 poeng. # Konstrukt?r: 3p # les_onsker_fra_fil: 4p class Julegavefikser: def __init__(self, ant_dager): self._kalender = Juleferiekalender(ant_dager) self._onskeliste = Onskeliste() self._neste_dag = 25 def les_onsker_fra_fil(self, filnavn): fil = open(filnavn, "r") for linje in fil: data = linje.strip().split(";") self._onskeliste.nytt_onske(data[0], int(data[1]), int(data[2])) fil.close() # 4f) 8 poeng. # giver som parameter eller lest fra terminal er ok def velg_gave(self, giver): max_pris = int(input("\nHva er hoyeste pris du vil betale? ")) meny = self._onskeliste.hent_onsker(max_pris) onske_nr = 0 for onske in meny: print ("Onske nr " + str(onske_nr) + ": " + onske) onske_nr += 1 valgt_nr = int(input("Hvilken gave vil du gi? ")) beskrivelse = self._onskeliste.onske_oppfylles(valgt_nr) ant_dager = self._kalender.hent_ant_dager() slutt_dag = (24+ant_dager) slutt_dato = str(slutt_dag) + ". desember" if slutt_dag > 31: slutt_dato = str(slutt_dag-31) + ". januar" print("Juleferiekalenderen starter 25. desember og slutter " + slutt_dato) foretrukket_dag = int(input("Oppgi dato (kun dag) du helst vil gi gaven: ")) self._kalender.ny_gave(beskrivelse, giver, foretrukket_dag) def ny_dag(self): luke_beskjed = self._kalender.hent_dagens_gave(self._neste_dag) self._neste_dag += 1 if self._neste_dag == 32: self._neste_dag = 1 return luke_beskjed # Ikke en del av eksamensoppgaven: def hovedprogram(): ant = int(input("\n\nAntall dager i kalender: ")) fikser = Julegavefikser(ant) fikser.les_onsker_fra_fil("Onskeliste.txt") giver = input("Oppgi navn og evt kontaktinfo: ") for i in range(ant): fikser.velg_gave(giver) print("Gaven er plassert i kalenderen.") print("\n\nVelkommen til juleferiekalenderen - julekalender for juleferien!") for dag in range(ant): print(fikser.ny_dag()) input("Trykk Enter for ny dag") print("Juleferiekalenderen er ferdig for i aar - lykke til med nytt semester!") hovedprogram()