#Oppgave 1 class Person: def __init__(self, f?dselsnummer, navn): self._f?dselsnummer = f?dselsnummer self._navn = navn def __str__(self): return self._f?dselsnummer + " (" + self._navn + ")" print(Person("01010112345", "Indigo Matheus")) ''' Hva blir skrevet ut til terminalen ved kj?ring av programmet over? Hva skjer hvis vi bruker print(self._f?dselsnummer + " (" + self._navn + ")") i stedet for return self._f?dselsnummer + " (" + self._navn + ")" ? Hva blir skrevet ut til terminalen ved fjerning av __str__-metoden over? ''' #Oppgave 2 class 澳门葡京手机版app下载: def __init__(self, gatenavn, bolignummer, postnummer): self._gatenavn = gatenavn self._bolignummer = bolignummer self._postnummer = postnummer def __eq__(self, annen): return (self._gatenavn == annen._gatenavn and self._bolignummer == annen._bolignummer and self._postnummer == annen._postnummer) adr1 = 澳门葡京手机版app下载("Pythongata", 1, 0000) adr2 = 澳门葡京手机版app下载("Pythongata", 1, 0000) print(adr1 == adr2) print(adr1 is adr2) ''' Hva skrives ut til terminalen med print(adr1 == adr2) i programmet over? Hva skrives ut til terminalen med print(adr1 is adr2) i programmet over? Sammenlign svarene i a) og b). Hva oppdager dere, og hvorfor er det slik? Hvorfor trenger vi ikke egne metoder for ? hente ut _gatenavn, _bolignummer og _postnummer fra annen-objektet i __eq__-metoden? ''' #Oppgave 3 class Konsulentselskap: def __init__(self, organisasjonsnr, selskapsnavn, beskrivelse): self._organisasjonsr = organisasjonsnr self._selfskapsnavn = selskapsnavn self._beskrivelse = beskrivelse def __str__(self): return f"{self._selfskapsnavn} (OrgNr: {self._organisasjonsr}): {self._beskrivelse}" def __eq__(self, annen): return (self._organisasjonsr == annen._organisasjonsr and self._selfskapsnavn == annen._selfskapsnavn and self._beskrivelse == annen._beskrivelse) ''' Gitt klassen ovenfor, lag en __str__-metode med informasjon om konsulentselskap. Lag en __eq__-metode som returnerer True hvis organisasjonsnr er likt, ellers False. ''' #Oppgave 4 class Matbutikk: def __init__(self): self._varer = [] def legg_til_vare(self, vare): self._varer.append(vare) def hent_varer(self): return self._varer class Vare: def __init__(self, vareid, varenavn): self._vareid = vareid self._varenavn = varenavn def __str__(self): #return "(" + str(self._vareid) + ") " + self._varenavn return f"({self._vareid}) {self._varenavn}" def __eq__(self, annen): return (str(self) == str(annen)) ''' Utvid programmet med slik funksjonalitet ved ? inkludere en __eq__-metode som del av l?sningen. Hint: dere kan bruke str(self) og str(annen) i __eq__-metoden n?r to varer skal sammenlignes. ''' def hovedprogram(): skinkebutikk = Matbutikk() for i in range(5): ny_skinke = Vare(i, "Skinke-" + str(i)) skinkebutikk.legg_til_vare(ny_skinke) liste_varer = skinkebutikk.hent_varer() for skinke in liste_varer: print(skinke) skinke1 = Vare(1, "Skinke-" + str(1)) print(liste_varer[1] == skinke1) hovedprogram() ''' Utvid programmet ovenfor med en __str__-metode i Vare-klassen. Metoden skal inkludere b?de vareid og varenavn. Fortsett ? utvide programmet, slik at det ved hjelp av en annen for-l?kke skriver ut vareid og varenavn til terminalen for varene i lista _varer refererer til. Dere skal dra nytte av __str__-metoden i l?sningen (men aldri kalle p? denne direkte). Det er viktig at en vare med samme vareid og varenavn som en som allerede ligger i lista _varer refererer til, ikke kan legges til flere ganger. Utvid programmet med slik funksjonalitet ved ? inkludere en __eq__-metode som del av l?sningen. Hint: dere kan bruke str(self) og str(annen) i __eq__-metoden n?r to varer skal sammenlignes. Hvorfor kunne dere ikke brukt str(self) og str(annen) i c) hvis Vare-klassen ikke hadde en __str__-metode? ''' ''' Oppgave 6 ''' class Rom: def __init__(self, kvadratmeter, rom_type): self._rom_type = rom_type self._st?rrelse = kvadratmeter def rom_type(self): return self._rom_type def st?rrelse(self): return self._st?rrelse def __str__(self): return "\n" + self.rom_type() + " som er " + str(self.st?rrelse()) + " kvadratmeter" class Hus: #fem rom; en stue, et bad, et kj?kken og to soverom #max 5 rom, kun typene over def __init__(self, adresse): self._adresse = adresse self._rom = [] self._rom_typer = ["stue", "bad", "kjokken", "soverom"] def bygg_rom(self, rom): #max 5 rom, kun typene over if len(self._rom) < 5: if rom.rom_type() in self._rom_typer: self._rom.append(rom) else: print(f"Ikke akseptert rom type! {rom.rom_type()}") else: print("Maks antall rom oppn?dd!") def __str__(self): #info om huset og alle rommene s = f"P? adresse {self._adresse} har vi et hus med:" total_husstorrelse = 0 for rom in self._rom: #s += "\n" + rom.rom_type() + " som er " + str(rom.st?rrelse()) + " kvadratmeter" s += str(rom) total_husstorrelse += rom.st?rrelse() s += "\nHuset er p? " + str(total_husstorrelse) + " kvadratmeter" return s def hovedprogram(): hus = Hus("Gaustadall¨¦en 23B") stue = Rom(20, "stue") bad = Rom(6, "bad") kjokken = Rom(12, "kjokken") soverom1 = Rom(10, "soverom") soverom2 = Rom(12, "soverom") #legge til rommene i huset hus.bygg_rom(stue) hus.bygg_rom(bad) hus.bygg_rom(kjokken) hus.bygg_rom(soverom1) hus.bygg_rom(soverom2) #ekstra_bad = Rom(4, "bad") #hus.bygg_rom(ekstra_bad) print(hus) hovedprogram() ''' Oppgaven deres er ? lage en klasse for hus best?ende av fem rom; en stue, et bad, et kj?kken og to soverom. St?rrelsen p? rommene velger dere selv. Det skal v?re mulig ? legge til rom, men bare fem og bare romtypene som er nevnt. Dere m? finne ut hvilke instansvariabler, metoder og parametere dere trenger selv. Det skal v?re mulig ? kalle print(et_husobjekt) og f? informasjon om huset og alle rommene i huset skrevet ut til terminalen (inkludert total husst?rrelse i kvadratmeter). ''' #Tidligere eksamensoppgave. Return True hvis 2, og kun 2 vil. Ellers False #Kan l?ses p? mange ulike m?ter, pr?ve ? lag flere! def badmington(per_vil, palle_vil, espen_vil): if per_vil and palle_vil and espen_vil: return False if per_vil and palle_vil: return True if palle_vil and espen_vil: return True if per_vil and espen_vil: return True return False def badmington(per_vil, palle_vil, espen_vil): ordbok = {"Vil": 0} if per_vil: ordbok["Vil"] += 1 if palle_vil: ordbok["Vil"] += 1 if espen_vil: ordbok["Vil"] += 1 return ordbok["Vil"] == 2 def badmington(per_vil, palle_vil, espen_vil): vil = 0 if per_vil: vil += 1 if palle_vil: vil += 1 if espen_vil: vil += 1 return vil == 2 def badmington(per_vil, palle_vil, espen_vil): liste = [per_vil, palle_vil, espen_vil] true_teller = 0 for person in liste: if person: true_teller += 1 return true_teller == 2