# 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()