# Se lesInnKommuneinfo00每04 for programmering av denne: def les_fil_returner_tabell(filnavn): # filnavn m? ha type str og fila m? eksistere i samme mappe som denne koden liste = [] fil = open(filnavn) for linje in fil: liste.append(linje.strip().split("\t")) # liste blir ei liste av lister, der hver # indre liste er strenger(str) fra innfila # som er adskilt med tabulator('\t') return liste kommuneliste = les_fil_returner_tabell("liste.txt") # Starten av kommuneliste ser n? s?nn ut: # [ # ['03', 'Oslo', '0301', 'Oslo', '0301'], # ['11', 'Rogaland', '1101', 'Eigersund', '1101'], # ['11', 'Rogaland', '1103', 'Stavanger', '1103'], # ... # ] # ?nsker ? lage ei ordbok med kommunenr som n?kkel, # og kommunenavn, fylkesnr og -navn i ei liste som # innholdsverdi. F.eks. for Oslo, Eigersund og Stavanger (sml. lista ovenfor): # { # '0301': ['Oslo', '03', 'Oslo'], # '1101': ['Eigersund', '11', 'Rogaland'], # '1103': ['Stavanger', '11', 'Rogaland'], # ... } # kommuner = {} for komm in kommuneliste: kommuner[ komm[2] ] = [komm[3], komm[0], komm[1]] kommuneordbok = kommuner # kommuneordbok refererer n? til samme ordboksobjekt som kommuner refererer til # Prosedyre for ? vente p? at brukeren taster : def stopp(melding): if melding == None: melding = "" input(melding + ". Venter p? input:") print("*"*80 + "\n") # Prosedyre uten parameter, uten returverdi def fra_nummer_til_knavn(): knr = "9999999" while knr != "": knr = input("Kommune" + "nummer: ") if knr in kommuneordbok: print("Kommunen som har nummer", knr, "er", kommuneordbok[knr]) else: print("Finnes ingen kommune som har nummer", knr) # fra_nummer_til_knavn() # Prosedyre uten parameter, uten returverdi def antall_fylker(): fylker = [] for knr in kommuneordbok: fylkesnavn = kommuneordbok[knr][2] if fylkesnavn in fylker: continue else: fylker.append(fylkesnavn) print("Antall fylker i kommuneordboka er", len(fylker)) antall_fylker() stopp("Etter kall p? antall_fylker()") # Prosedyre uten parameter, med returverdi def liste_med_fylkesnavn(): fylker = [] for knr in kommuneordbok: fylkesnavn = kommuneordbok[knr][2] if not fylkesnavn in fylker: fylker.append(fylkesnavn) # returnerer lista med (unike) fylkesnavn return fylker print(liste_med_fylkesnavn()) stopp("Etter liste_med_fylkesnavn()") ''' def ny_liste_med_fylkesnavn(): fylker = [] for knr in kommuneordbok: print(kommuneordbok[knr][2].split(' 每 ')[0]) if not kommuneordbok[knr][2].split(' 每 ')[0] in fylker: fylker.append(kommuneordbok[knr][2].split(' 每 ')[0]) return fylker print(ny_liste_med_fylkesnavn()) ''' # Ingen av de ovenfor er 'godt programmert', da de bruker globale variabler # Prosedyre med parameter, uten returverdi # Mer generell, bruker ikke variable som er definert utenfor prosedyra def antall_aer_i_tekststreng(streng): # Krever at streng referer til et String-objekt antall=0 for tegn in streng: if tegn == 'a': antall+=1 print("Det er", antall,"'a'-er i '" + streng + "'") antall_aer_i_tekststreng("application is built as a collection of loosely coupled, \ independently deployable services that are designed to be \ lightweight, scalable, and resilient") antall_aer_i_tekststreng("Abrakadabra" + 7*'abc') antall_aer_i_tekststreng(liste_med_fylkesnavn()[14]) stopp("Etter antall_aer_i_tekststreng") def antall_tegn_i_streng( tegn, streng ): antall=0 for t in streng: if t == tegn: antall+=1 print("Det er", antall, tegn+"-er i '" + streng + "'") antall_tegn_i_streng('k', liste_med_fylkesnavn()[14]) antall_tegn_i_streng(' ', "application is built as a collection of loosely coupled, \ independently deployable services that are designed to be \ lightweight, scalable, and resilient") stopp("Etter antall_tegn_i_streng") def antall_tegn_i_streng( tegn, streng ): antall=0 for t in streng: if t == tegn: antall+=1 return antall en_lang_streng = "All retting/tilbakemelding av innleveringsoppgaver"\ + " inklusive obliger skjer som samretting, dvs. at student og retter m?tes"\ + " fysisk eller p? Zoom (digitalt). Fysisk samretting skjer som hovedregel"\ + " p? programmeringslaben som er p? seminarrom C hver tirsdag fra 12.15每16.00."\ + " Samretting kan ogs? foreg? utenom laben." print(en_lang_streng) antall_tegn = {} # n?kkel er ett tegn(str) og innholdsverdi et heltall (antall forekomster til tegnet) for char in "abcdefghijklmnopqrstuvwxyz???1234567890 .,": # char f?r verdiene 'a', 'b', 'c', ..., ' ', '.', ',' if char in antall_tegn: # tegnet finnes fra f?r og vi gj?r ingenting continue else: # nytt tegn, oppretter n?kkel med antall antall_tegn[char] = antall_tegn_i_streng( char, en_lang_streng ) for char in "abcdefghijklmnopqrstuvwxyz???1234567890 .,": print("Antall " + "'" + char + "': " , antall_tegn[char]) # Oppgave: # Forenkle programmet ved ? sl?yfe antall_tegn-ordboka og den nest siste for-l?kka.