# Vi legger om datastrukturen. Lar fylkene v?re hovedobjekter. # Vi endrer konstrukt?ren til Kommune, se klassen. fylkesnr_og_navn = { '03': 'Oslo', '11': 'Rogaland', '15': 'M?re og Romsdal', '18': 'Nordland', '30': 'Viken', # oppl?st 1. januar 2024 '31': '?stfold', '32': 'Akershus', '33': 'Buskerud', '34': 'Innlandet', '38': 'Vestfold og Telemark', # oppl?st 1. januar 2024 '39': 'Vestfold', '40': 'Telemark', '42': 'Agder', '46': 'Vestland', '50': 'Tr?ndelag', '54': 'Troms og Finnmark', # oppl?st 1. januar 2024 '55': 'Troms', '56': 'Finnmark' } class Fylke: def __init__(self, nr, nvn): self._nummer = nr # fylkesnummeret self._navn = nvn # fylkesnavnet self._kommuner = [] # liste over kommuner i dette fylket def legg_til_kommune(self, k): # k er et kommuneobjekt self._kommuner.append(k) def nummer(self): return self._nummer def navn(self): return self._navn def kommuneliste(self): return self._kommuner class Kommune: def __init__(self, info): # Vi tar inn som parameter ei liste av kommuneinfo: self._infoliste = info # S? henter/setter den enkelte instans info ut/inn. Eks.: # ['31', '?stfold', '3124', 'Aremark', '3012'] # fnr fylkesnavn kommunenr -navn gmlknr # 0 1 2 3 4 def nummer(self): return self._infoliste[2] def navn(self): return self._infoliste[3] def fylkesnr(self): return self._infoliste[0] def fylkesnavn(self): return fylkesnr_og_navn[self.fylkesnr()] # eller # return return self._infoliste[1] def gmlt_nummer(self): return self._infoliste[4] # Kan jo hende vi f?r bruk for disse hvis en kommune endrer # navn eller nummer: def sett_nummer(self, nr): self._infoliste[2] = nr def sett_navn(self, n): self._infoliste[3] = n # Prosedyre for ? lage en liste av kommuneinformasjon fra fil: def les_fil_returner_tabell(filnavn): liste = [] fil = open(filnavn) for linje in fil: liste.append(linje.strip().split("\t")) return liste kommuneinfo = les_fil_returner_tabell("liste.txt") # Starten av kommuneinfo (liste av lister) ser n? s?nn ut: # [ # ['03', 'Oslo', '0301', 'Oslo', '0301'], # ['11', 'Rogaland', '1101', 'Eigersund', '1101'], # ['11', 'Rogaland', '1103', 'Stavanger', '1103'], # ... # ] # Et kommuneobjekt skal innholde informasjon om # kommunenummer (indeks 2) og navn (indeks 3) # og gammelt (f?r 2024) kommunenummer (indeks 4) # kommuneliste = [] # blir ei liste med kommuneobjekter # kommuneordbok = {} # ei ordbok med kommuneobjekter fylker = {} # ei ordbok med fylkesobjekter, fylkesnr er n?kkel for info in kommuneinfo: kommune = Kommune(info) # kommuneliste.append(kommune) # inn i liste # kommuneordbok[info[2]] = kommune # inn i ordbok # kommunenr er n?kkel, kommuneobjekt innholdsverdi if not (kommune.fylkesnr() in fylker): nyttfylke = Fylke(kommune.fylkesnr(), fylkesnr_og_navn[kommune.fylkesnr()]) fylker[kommune.fylkesnr()] = nyttfylke fylke = fylker[kommune.fylkesnr()] # fylkesobjektet for fylket kommune ligger i fylke.legg_til_kommune(kommune) # print(kommune.nummer(), kommune.navn(), kommune.fylkesnr(), fylke.navn()) # Vi har n? ei ordbok med fylkesobjekter, # hvert fylke har ei liste med kommuneobjekter. Vi tester strukturen: for fnr in fylker: # fnr er fylkesnummer, n?kkel i ordboka fylke f = fylker[fnr] print("\n", f.nummer(), f.navn(), "har disse kommunene:") for k in f.kommuneliste(): # k itererer over print(" ", k.nummer(), k.navn())