# Til forelesningen uke 3. Sist oppdatert mandag 2. februar 14.41 teller = 0 def stopp(): # kalles for å gjøre en pause i kjøringa. Trykk 'enter' for å fortsette. global teller # Jeg ønsker faktisk å endre den globale variabelen teller = teller + 1 input(" "*70 + str(teller) + '> ') print() tekst = ''' Konklusjon • Programsetninger består av uttrykk som evaluerer til verdier ifølge helt presise regler • En verdi er alltid av én bestemt datatype, f.eks. heltall, flyttall, tekst eller boolsk verdi • Kodeflyt er presist definert etter enkle regler (for påfølgende linjer, beslutninger, prosedyrer osv) ''' print(tekst) stopp() # Uttrykk (høyresider) er lovlige programsetninger: 5 "mandag" 3 + 4 "Hei" + "du" not (76 <= 98) # .. men vi ser ingenting når vi kjører programmet! stopp() # Tjenester (metoder) i tekstobjekter (str) tekst = "Kongeriket Norge er et land med 15 fylker og 357 kommuner" print(tekst, tekst.upper()) print(tekst, tekst.lower(), len(tekst)) stopp() print(tekst.count("k")) stopp() print(tekst.index('N'), tekst.index('K'), tekst.index('r'), tekst.index('Nor')) stopp() t1 = "Hei du, . \n\n " t2 = "hvordan har du det?" print(t1 + t2) print(t1.strip() + t2) stopp() # Lister # indeks: 0 1 2 3 fylkerAlfabetisk = ["Agder", "Innlandet", "Møre og Romsdal", "Nordland" ] print( fylkerAlfabetisk[0], fylkerAlfabetisk[1], fylkerAlfabetisk[2], fylkerAlfabetisk[3] ) print(fylkerAlfabetisk) stopp() fylkerAlfabetisk.append("Oslo") # indeks 4 print(fylkerAlfabetisk) stopp() fylkerAlfabetisk.append("Rogaland") # 5 print(fylkerAlfabetisk) stopp() fylkerAlfabetisk.append("Troms og Finnmark") # 6 fylkerAlfabetisk.append("Trøndelag") # 7 fylkerAlfabetisk.append("Vestfold og Telemark") # 8 fylkerAlfabetisk.append("Vestland") # 9 fylkerAlfabetisk.append("Viken") # 10 print(fylkerAlfabetisk) stopp() print(fylkerAlfabetisk[7]) print(fylkerAlfabetisk[0]) print(fylkerAlfabetisk[10]) stopp() lengde = len(fylkerAlfabetisk) sisteIndeks = len(fylkerAlfabetisk) - 1 print(lengde, fylkerAlfabetisk[lengde-1]) print(fylkerAlfabetisk[len(fylkerAlfabetisk)-1]) print(sisteIndeks, fylkerAlfabetisk[sisteIndeks]) stopp() t = "Her er en såkalt 'tekststreng' ! " print(t, 'Her er en såkalt "tekststreng" ! ') ''' Fylker i Norge pr. 1.1.2024: Akershus (var i Viken en periode) Buskerud (var i Viken en periode) Østfold (var i Viken en periode) Innlandet (tidligere Hedmark og Oppland) Vestfold (var i Vestfold og Telemark en periode) Telemark (var i Vestfold og Telemark en periode) Agder (tidligere Aust- og Vest-Agder) Rogaland Vestland (tidligere Hordaland og Sogn og Fjordane) Møre og Romsdal Trøndelag (tidligere Sør- og Nord-Trøndelag) Nordland Troms (var i Troms og Finnmark en periode) Finnmark (var i Troms og Finnmark en periode) Oslo ''' # Fylket Viken finnes ikke lenger f = fylkerAlfabetisk.pop() # pop fjerner elementet sist i lista print(f , fylkerAlfabetisk) stopp() # Viken var Akershus, Buskerud og Østfold. Østfold skal inn bakerst (alfabetisk): fylkerAlfabetisk.append("Østfold") print(fylkerAlfabetisk) stopp() # Men hvordan få inn Buskerud på rett plass? fylkerAlfabetisk.insert(1,"Buskerud") # Plassen etter 0 "Agder": print(fylkerAlfabetisk) stopp() # Akershus skal inn på samme plass (mellom Agder og Buskerud): fylkerAlfabetisk.insert(1,"Akershus") print(fylkerAlfabetisk) stopp() # Finnmark (nå eget fylke igjen) skal inn på plassen der Innlandet ligger indeks = fylkerAlfabetisk.index("Innlandet") fylkerAlfabetisk.insert(indeks, "Finnmark") print(indeks, fylkerAlfabetisk, len(fylkerAlfabetisk)) stopp() # Så må "Troms og Finnmark" gjøres om til bare "Troms", men kan ligge på samme plass indeks = fylkerAlfabetisk.index("Troms og Finnmark") fylkerAlfabetisk[indeks] = "Troms" print(indeks, fylkerAlfabetisk) stopp() # Da gjenstår vel bare å splitte Vestfold og Telemark: indeks = fylkerAlfabetisk.index('Vestfold og Telemark') fylkerAlfabetisk[indeks] = 'Vestfold' print(indeks, fylkerAlfabetisk) stopp() # Telemark er alfabetisk siste før Troms: indeks = fylkerAlfabetisk.index('Troms') fylkerAlfabetisk.insert(indeks, "Telemark") print(fylkerAlfabetisk) stopp() gamleFylker = ['Agder', 'Innlandet', 'Møre og Romsdal', 'Nordland', 'Oslo', 'Rogaland', 'Troms og Finnmark', 'Trøndelag', 'Vestfold og Telemark', 'Vestland', 'Viken'] print("Gamle fylker: ", gamleFylker) nyeFylker = [ 'Akershus', 'Buskerud', 'Østfold', 'Troms', 'Finnmark', 'Vestfold', 'Telemark' ] print("Nye fylker: ", nyeFylker) fylker = gamleFylker + nyeFylker # Vi kan slå sammen lister (akkurat som tekkster) print(fylker) stopp() # Fylker som ble oppløst 1.1.2024: gamleFylker.remove("Troms og Finnmark") gamleFylker.remove('Vestfold og Telemark') gamleFylker.remove("Viken") print(gamleFylker) stopp() fylker = gamleFylker + nyeFylker print(fylker) stopp() # fylkerAlfabetisk = fylker.sort() # går ikke fordi sort() returnerer None! fylker.sort() # Endrer rekkefølgen på verdiene i listeobjektet fylker peker på fylkerAlfabetisk = fylker # Nå er fylker sortert print(fylkerAlfabetisk) stopp() # Verdiene i lista kan være alle verdier vi kjenner til (int, str, bool, float, list) tomListe = [] # et tomt listeobjekt #print(tomListe) heltliste = [3, -6, 5, 101, 0, 3] # ei liste med heltall #print(heltliste) flyttliste = [1.0, -4.45, 718.33333] # ei liste med flyttall print(flyttliste) emneliste = ["IN1000", "IN1010", "IN2090", "IN2010"] # tekststreng-liste #print(emneliste) byer1 = ["Bergen", "Tromsø", "Skien" + 3*'!'] # ei liste med tekststrenger print(byer1) # Ved hjelp av den boolske operatoren in kan vi teste om en verdi er i lista eller ikke: sant_eller_usant = "Viken" in fylkerAlfabetisk print(sant_eller_usant) print(fylkerAlfabetisk) sant_eller_usant = "Oslo" in fylkerAlfabetisk print(sant_eller_usant) stopp() def testOmFylke(): navn = input("Skriv et navn du mener er et fylke: ") if navn in fylkerAlfabetisk: # True hvis navn er i lista print("Ja, " + navn + " er et fylke") print("... og er på indeks", fylkerAlfabetisk.index(navn), "i lista.") else: print("Nei, " + navn + " er ikke et fylke") testOmFylke() testOmFylke() testOmFylke() testOmFylke() # Tekststrenger (str) og lister (list) # str er ei liste av tegn tekst = "Kongeriket Norge er et land" liste_av_tegn = list(tekst) print(liste_av_tegn) stopp() print(liste_av_tegn[10], liste_av_tegn[11]) stopp() # Vi kan også indeksere tekststrengen direkte: print(tekst[0], tekst[5], tekst[10:15]) stopp() # Mengder (set) er ei liste der én og samme verdi kun kan forekomme én gang tekst = "Kongeriket Norge er et land" print(set(tekst)) # (matematisk) mengde (set på engelsk) print(set('bbbabbabbbcbbbsbcbbbaaaaaabc')) stopp() t1 = "Hei du, . \n\n " t2 = "hvordan har du det?" print(list(t1)) print(set(t1)) stopp() # Nå når vi har lært om lister, kan vi nevne linje = 'Kodeflyt er presist definert etter enkle regler (for linjer, beslutninger, prosedyrer osv)' print(linje.split()) stopp() # Ordbøker Dictionaries (dict) ''' Læringsmål • Etter modulen: • Forstår du hva som menes med at ordbøker lar deg definere koblinger mellom verdier • Ser du hvordan du kan ta i bruk slike koblinger mellom verdier for å løse programmeringsproblemer • Kjenner du til tjenestene en ordbok tilbyr og kan bruke disse i egne programmer ''' land = {} # ei tom ordbok land["AFG"] = "Afganistan" # Legger "Afganistan" inn med nøkkel "AFG" land["NPL"] = "Nepal" land["NOR"] = "Norge" land["USA"] = "Sambandsstatene" land["CHN"] = "Kina" print(land, "har lengde", len(land)) stopp() # Denne definisjonen er lik den over. Rekkefølgen spiller ingen rolle: land2 = { 'NPL': 'Nepal', 'AFG': 'Afganistan', 'NOR': 'Norge', 'USA': 'Sambandsstatene', 'CHN': 'Kina' } print(land2, "har lengde", len(land)) stopp() # Rekkefølgen spiller ingen rolle: if land == land2 : print("land og land2 er like.") else: print("land og land2 er IKKE like.") stopp() # land ={'NPL': 'Nepal', 'AFG': 'Afganistan', # 'NOR': 'Norge', 'USA': 'Sambandsstatene', 'CHN': 'Kina'} print(land["USA"]) # I stedet for indeks, brukes nøkkelen for å hente verdien stopp() land["ITA"] = "Italia" # Legge til et nytt element land["USA"] = "Amerikas forente stater" # endrer verdien for nøkkelen "USA" # Fylker har et entydig nummer knyttet til seg, da kan vi bruke dette (fylkesnummeret) som nøkkel: fylker = {} fylker[3] = "Oslo" fylker[11] = "Rogaland" fylker[15] = "Møre og Romsdal" # ... # Både nøkler og verdier kan være tekst eller tall landTilKode = {"NOR":47, "DEU":49, "ITA":39} # tekst -> tall kodeTilLand = {47:"NOR", 39:"ITA", 49:"DEU"} # tall -> tekst print(kodeTilLand[39], "har prefiks 39") print(land[kodeTilLand[39]], "har prefiks 39") sum = landTilKode["NOR"] + landTilKode["ITA"] # kan legge sammen heltall print("Summen er: ", sum) konkat = kodeTilLand[49] + kodeTilLand[39] # konkatenering av tekst print("Summen er: ", konkat) stopp() # Den logiske operatoren in gjelder ("leter i") nøklene: landTilKode = {"NOR":47, "DEU":49, "ITA":39} # tekst -> tall kodeTilLand = {47:"NOR", 39:"ITA", 49:"DEU"} # tall -> tekst print("47 in landTilKode er: ", (47 in landTilKode) ) print("'Norge' in landTilKode er: ", 'Norge' in landTilKode ) print("'NOR' in landTilKode er: ", 'NOR' in landTilKode ) if 49 in landTilKode: print("49 er nøkkel i landTilKode") else: print("49 er ikke nøkkel i landTilKode") stopp() ''' Ordbøker • En ordbok (dict) er en samling mappinger (transformasjoner) fra én verdi til én annen • Det man mapper fra kalles nøkkelverdi (key) • Det man mapper til kalles en innholdsverdi (value) • Både nøkler og innholdsverdier kan være av ulike typer ''' by = {"Norge":"Oslo", "Tyskland":"Berlin", "Italia":"Roma"} tlf = {"Norge": 47, "Tyskland": 49, "Italia": 39} # Slår opp som i ei liste: by_i_Norge = by["Norge"] # uttrykket (h.s.) evaluerer til verdien "Oslo" # I ei ordbok tester in om det finnes en slik NØKKELverdi print(47 in tlf) stopp() print("Italia" in tlf) stopp() # Nøstede samlinger # Lister: matrise = [] matrise.append([1, 2, 3]) matrise.append([4, 5, 6]) matrise.append([7, 8, 9]) print(matrise) print("For å hente ut én verdi, må vi bruke flere indekser: ", matrise[0][2]) print("Sammenlign med når vi bruker kun én indeks: ", matrise[0]) stopp() # Ordbøker: kommuner_i_fylke = {'Vestfold' : ['Horten', 'Holmestrand', 'Tønsberg', 'Sandefjord', 'Larvik', 'Færder'] } kommuner_i_fylke['Oslo'] = ["Oslo"] kommuner_i_fylke['Østfold'] = ['Halden', 'Moss', 'Sarpsborg', 'Fredrikstad', 'Hvaler', 'Råde', 'Våler', 'Skiptvet', 'Indre Østfold', 'Rakkestad', 'Marker', 'Aremark'] kommuner_i_fylke['Viken'] = [ ] print(kommuner_i_fylke) stopp() print("Innholdsverdien for nøkkelen 'Vestfold' er ei liste: ", kommuner_i_fylke['Vestfold']) stopp() print("For å skrive ut en kommune, må vi indeksere lista: ", kommuner_i_fylke['Vestfold'][3]) stopp()