# Vi legger om datastrukturen. Lar fylkene v?re hovedobjekter 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 def ant_kommuner(self): return len(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 fylkesnr(self): return self._infoliste[0] def fylkesnavn(self): return self._infoliste[1] def nummer(self): return self._infoliste[2] def navn(self): return self._infoliste[3] def gammelt_knr(self): return self._infoliste[4] def __str__(self): objektet_som_tekst = self.nummer() + " " + self.navn() + "\n" objektet_som_tekst += " i " + self.fylkesnavn() + " fylke\n" objektet_som_tekst += " med gammelt kommunenummer " + self.gammelt_knr() return objektet_som_tekst # 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 # slutt class Kommune class Land: # Prosedyre for ? lage en liste av kommuneinformasjon fra fil: def _les_fil_returner_tabell(self, filnavn): liste = [] fil = open(filnavn) for linje in fil: liste.append(linje.strip().split("\t")) return liste def __init__(self, navn, filnavn): self._navn = navn kommuneinfo = self._les_fil_returner_tabell(filnavn) self._fylker = {} # ei ordbok med fylkesobjekter, fylkesnr er n?kkel for info in kommuneinfo: kommune = Kommune(info) if not (kommune.fylkesnr() in self._fylker): nyttfylke = Fylke(kommune.fylkesnr(), kommune.fylkesnavn()) self._fylker[kommune.fylkesnr()] = nyttfylke fylke = self._fylker[kommune.fylkesnr()] # fylkesobjektet for fylket kommune ligger i fylke.legg_til_kommune(kommune) mer_kommuneinfo = self._les_fil_returner_tabell("mer_kommuneinfo.txt") ''' Her er 3 elementer fra denne lista (av lister): NB!! Lista er fra 2023, f?r fylkesoppsplittinga ['3007', 'Ringerike', 'H?nefoss', 'Viken', '31 444', '1 555,11'], ['3011', 'Hvaler', 'Skj?rhalden', 'Viken', '4 762', '90,12'], ['3012', 'Aremark', 'Fossby', 'Viken', '1 329', '319,27'] knr knavn admsted fylkesnavn innbyggere areal ?nsker ? finne om det her er noen kommuner som vi ikke har fra f?r ''' for liste in mer_kommuneinfo: kmnnr = liste[0] if self.hent_kommune_utfra_gammelt_kommunenr(kmnnr) == None: print("Finner ikke denne kommunen:", liste) def hent_kommune_utfra_gammelt_kommunenr(self, gmlknr): for fnr in self._fylker: fylke = self._fylker[fnr] for k in fylke.kommuneliste(): if k.gammelt_knr() == gmlknr: return k # hele kommuneobjektet return None def skriv_ut_fylker(self): for fnr in self._fylker: # fnr er fylkesnummer, n?kkel i ordboka fylke f = self._fylker[fnr] print(f.nummer(), f.navn(), "har", f.ant_kommuner(), "kommuner") def skriv_ut_fylker_og_kommuner(self): for fnr in self._fylker: # fnr er fylkesnummer, n?kkel i ordboka fylke f = self._fylker[fnr] print("\n", f.nummer(), f.navn(), "har disse kommunene:") for k in f.kommuneliste(): # k itererer over print(" ", k.nummer(), k.navn()) # Hovedprogram norge = Land("Norge", "kommuneinfo.txt") norge.skriv_ut_fylker() sigdal = norge.hent_kommune_utfra_gammelt_kommunenr("3045") print(sigdal)