Håndtere mange verdier

Like dokumenter
Løkker og lister. Løse problemer med programmering. INF1001, uke3 Geir Kjetil Sandve

Løse reelle problemer

Løkker og arrayer. Løse problemer med programmering. INF1000, uke3 Geir Kjetil Sandve

IN uke 1. Komme i gang med programmering

Metoder med parametre, løkker og arrayer

Hvordan løse problemer med programmering?

IN uke 1. Komme i gang med programmering

Finne ut om en løsning er helt riktig og korrigere ved behov

Objektorientert programmering i Python. Resten av semesteret. Innhold uke 9 Mer komplekse strukturer. Referanser og objekter, inkl Mentimeter spørsmål

Innhold uke 9. Objektorientert programmering i Python. Om ukens pensum. Referanser og objekter Tema: Mer komplekse strukturer

Løse reelle problemer

Finne ut om en løsning er helt riktig og korrigere ved behov

Øvingsforelesning 9 i Python (TDT4110)

PGZ - Hangman Ekspert Python Lærerveiledning

Oppgave 1 Hva tror du følgende program skriver ut til terminalen? Diskuter med gruppen.

Objektorientert programmering i Python

Oppgaver uke 1: Løsningsforslag

MENGDER (SETS) Læringsmål og pensum. Kapittel 9.2

IN uke 1. Komme i gang med programmering

TDT4110 Informasjonsteknologi grunnkurs: Tema: Dictionaries og mengder (sets) - Kapittel 9. Professor Alf Inge Wang

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Dictionaries og sets (mengder) Utgave 3: Kap. 9. Terje Rydland - IDI/NTNU

Hvor gammel er du? Hvor gammel er du? Del 1: Skrive ut til skjerm. Gjøre selv. Skrevet av: Sindre O. Rasmussen, Kodeklubben Trondheim

Python: Valg og betingelser. TDT4110 IT Grunnkurs Professor Guttorm Sindre

INF120: Oblig 3. Yngve Mardal Moe

Hver ting i en liste kalles et element. En liste lages ved å skrive elementer inni [], med, mellom elementene:

IN1140 Ekstraoppgaver uke 3

IN1000 Obligatorisk innlevering 7

Oppsummering fra sist

Først må vi få datamaskinen til å velge et tilfeldig ord, så la oss begynne. Lagre programmet ditt og kjør det. Hvilket ord skrives ut?

Hangman. Steg 1: Velg et ord. Steg 2: Gjett en bokstav. Sjekkliste. Sjekkliste. Introduksjon

Løpende strekmann Erfaren Videregående Python PDF

Informasjon Eksamen i IN1000 og IN1001 høsten a) 1 poeng. 1b) 1 poeng. Tid. Oppgavene. Tillatte hjelpemidler. 30. november kl. 14.

Læringsmål og pensum. if (be): else (not_to_be):

Python: Oppslagslister (dictionaries) og mengder 3. utgave: Kapittel 9

Informasjon Prøveeksamen i IN1000 høsten 2018

Øvingsforelesning 7 i Python (TDT4110)

Oppgavesett for Python

AlgDat - Øvingsforelesning 1 Introduksjon til Python, lenkede lister og øving 1

Øvingsforelesning 1 Python (TDT4110)

Eksamensoppgaver 2014

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk. - 3rd edition: Kapittel 3. Professor Alf Inge Wang

På tide med et nytt spill! I dag skal vi lage tre på rad, hvor spillerne etter tur merker ruter med X eller O inntil en av spillerne får tre på rad.

INF1000 Eksamen 2014 (modifisert)

Prøveeksamen IN1000. IN Prøveeksamen. Dato november 2017 Tid 12:30-12:00 Alle trykte og skrevne hjelpemidler er tillatt.

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Python: Lister og tupler Gaddis: Kapittel 7

INF uke 2. Inputt, beslutninger, kontrollflyt og prosedyrer

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap. 3

if (be): else (not_to_be): TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap.

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Med løkke: Læringsmål og pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Løkker/Sløyfer Utgave 3: Kap. 4 Utgave 2: Kap. 5. Mål.

Øvingsforelesning i Python (TDT4110)

Husk at du skal ha to vinduer åpne. Det ene er 'Python Shell' og det andre er for å skrive kode i.

1. Rullende navn, s 3 2. Smilefjes, s 5 3. Skritteller, s 7 4. Orakel, s 9 5. Stein, saks og papir, s Kompass, s 14

TDT4110 IT Grunnkurs Høst 2015

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Unntak (exceptions) (Kap 6) Dictionaries (Kap. 9) Terje Rydland - IDI/NTNU

For å sjekke at Python virker som det skal begynner vi med å lage et kjempeenkelt program. Vi vil bare skrive en enkel hilsen på skjermen.

IN uke 2. Presis forståelse av programmering

IN1000 Repetisjonskurs: IO og listeoperasjoner (+ string)

Feilmeldinger, brukerinput og kontrollflyt

Husk at du skal ha to vinduer åpne. Det ene er 'Python Shell' og det andre er for å skrive kode i.

Informasjon Eksamen i IN1000 høsten 2017


INF2220: Forelesning 3. Map og hashing Abstrakte datatyper (kapittel 3.1) Map (kapittel 4.8) Hashing (kapittel 5)

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Løse reelle problemer

INF1000 Eksamen 2014 (modifisert)

Steg 0: Installere Pygame Zero

Hangman. Level. Introduksjon

TDT4110 Informasjonsteknologi grunnkurs: Tema: Lister og tupler. - 3rd edition: Kapittel 7. Professor Alf Inge Wang

Mattespill Nybegynner Python PDF

Legg bort skilpaddene dine, i dag skal vi lære hvordan vi kan sende hemmelige beskjeder!

INF2220: Forelesning 3

Innhold uke 8. Objekter: Bruk og intern organisering. Beskjeder: Oblig 1 6. Beskjeder: Oblig 7 (og 8)

TDT4110 Informasjonsteknologi grunnkurs: Tema: Løkker. - 3rd edition: Kapittel 4. Professor Alf Inge Wang

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Norsk informatikkolympiade runde

Maps og Hashing. INF Algoritmer og datastrukturer. Map - ADT. Map vs Array

Legg bort skilpaddene dine, i dag skal vi lære hvordan vi kan sende hemmelige beskjeder!

Et større programeksempel. Hvordan løse et reelt problem med en objektorientert fremgangsmåte

Øvingsforelesning 3 Python (TDT4110)

I denne oppgaven skal vi repetere litt Python-syntaks, det er en god blanding av alle tingene du har lært i Python til nå.

Tre på rad mot datamaskinen. Steg 1: Vi fortsetter fra forrige gang. Sjekkliste. Introduksjon

INF Ekstrainnlevering

INF Algoritmer og datastrukturer

UNIVERSITETET I OSLO

Maps og Hashing. INF Algoritmer og datastrukturer. Map - ADT. Map vs Array

Innlevering 2b i INF2810, vår 2017

... Når internminnet blir for lite. Dagens plan: Løsning: Utvidbar hashing. hash(x) katalog. O modellen er ikke lenger gyldig ved

Datastrukturer. Stakker (Stacks) Hva er en datastruktur? Fordeler / Ulemper. Generelt om Datastrukturer. Stakker (Stacks) Elementære Datastrukturer

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

IN1140 H2019 gruppeoppgaver Språkmodeller og Ordklasser

Tre på rad mot datamaskinen. Steg 1: Vi fortsetter fra forrige gang

... HASHING. Hashing. Hashtabeller. hash(x)

Læringsmål og pensum. Intro løkker. Mål Lære om begrepet løkker Lære om bruk av while-løkke Lære om bruk av for-løkke Pensum. Kapittel 4.

Læringsmål og pensum. Oversikt

Kan micro:biten vår brukes som en terning? Ja, det er faktisk ganske enkelt!

IN1140 H2018 gruppeoppgaver Sannsynlighet og språkmodeller

Kap 2: Løkker og lister

Transkript:

Håndtere mange verdier Lister, mengder og ordbøker. Samt et lite frempek om objekter og tjenester. IN1000, uke3 Geir Kjetil Sandve

Hva vi har lært så langt Variabler Hvordan uttrykk evaluerer til verdier Kontrollflyt Beslutninger Prosedyrer

Plan for dagen Objekter og tjenester Lister Mengder Ordbøker Nøstede samlinger

Plan for dagen Objekter og tjenester Lister Mengder Ordbøker Nøstede samlinger

Objekter IN1000 er et kurs i objekt-orientert programmering Det å lage, bruke og forstå objekter vil være sentralt senere i faget For nå nøyer vi oss med hvordan vi kan bruke tjenester som objekter tilbyr Verdier er objekter og tilbyr ofte nyttige tjenester Noen objekter er konkrete og rett frem, slik som en tekstverdi Andre objekter er mer abstrakte og sammensatte, slik som et programvindu med menyer osv. Punktum benyttes for å aksessere tjenestene (metodene) til et objekt

Eksempel på tjenester som tekstverdier tilbyr upper gjør om til store bokstaver setning = "hallo" print( setning.upper() ) #HALLO count teller hvor mange ganger man finner et bestemt tegn setning = "kykkeli ky" print( setning.count("k") ) #4

Mer abstrakte objekter: tegne på skjermen Mer abstrakte objekter: vindu og lerret Med print kommer utskriften rett til terminalen For å tegne figurer må man lage et eget vindu Man lager først et vindu-objekt som representerer et område på skjermen Deretter får man fra vinduet et lerret-objekt som er det som holder selve tegningene (en av tjenestene et vindu tilbyr er å lage lerret) Hvordan dette ser ut i kode: vindu = GraphicsWindow() lerret = vindu.canvas()

Tegne på skjermen For å kunne tegne i praksis må vi hente en kodefil: Muligheten for å tegne på enkel måte følger ikke med Python Vi trenger derfor en ekstra pakke for dette formålet - læreboka (og vi) bruker ezgraphics Hvordan få på plass pakken vi trenger: Legg (last ned) "ezgraphics.py" i samme mappe som pythonprogrammet som skal tegne noe I programmet: from ezgraphics import GraphicsWindow Deretter lager man objekter og begynner å tegne: Lag vindu og lerret (canvas) Tegn rektangler o.l. på lerretet {grafikk.py} (merk forøvrig at både utskrift og tegning ikke er blant det sentrale i faget - ikke fokuser mye på det)

Plan for dagen Objekter og tjenester Lister Mengder Ordbøker Nøstede samlinger

Sjonglere med flere verdier {hoyde1.py}

Finne verdien vi trenger direkte hoydeaar0 = 50 hoydeaar1 = 76 hoydeaar2 = 87 hoydeaar3 = 96 alder = int(input("hvilken alder vil du vite hoyden for (0,1,2 eller 3 aar)? ")) if (alder==0): print(hoydeaar0) elif (alder==1): print(hoydeaar1) elif (alder==2): print(hoydeaar2) elif (alder==3): print(hoydeaar3)

Finne verdien vi trenger direkte hoydeaar0 = 50 hoydeaar1 = 76 hoydeaar2 = 87 hoydeaar3 = 96 alder = int(input("hvilken alder vil du vite hoyden for (0,1,2 eller 3 aar)? ")) if (alder==0): print(hoydeaaralder) elif (alder==1): print(hoydeaar1) elif (alder==2): print(hoydeaar2) elif (alder==3): print(hoydeaar3)

Vi kan slå opp verdien vi trenger direkte! Det vi ønsket: hoydeaaralder Syntaks i Python: hoydeaar[alder] Og før dette må vi definere hoydeaar som en liste: 0 1 2 3 hoydeaar = [50, 76, 87, 96]

Håndtere høydene i en liste {hoyde2.py}

Liste Definere en liste:

Definere en liste: hoydeaar = [50, 76, 87, 96] Liste 0 1 2 3 50 76 87 96

Definere en liste: hoydeaar = [50, 76, 87, 96] hoydeaar = [] Liste

Definere en liste: hoydeaar = [50, 76, 87, 96] hoydeaar = [] hoydeaar = [0] * 4 Liste 0 1 2 3 0 0 0 0

Definere en liste: hoydeaar = [50, 76, 87, 96] hoydeaar = [] hoydeaar = [0] * 4 Sette en enkeltverdi: hoydeaar[0] = 5 Liste 0 1 2 3 5 0 0 0

Definere en liste: hoydeaar = [50, 76, 87, 96] hoydeaar = [] hoydeaar = [0] * 4 Sette en enkeltverdi: hoydeaar[0] = 5 hoydeaar[2] = 8 Liste 0 1 2 3 5 0 8 0

Definere en liste: hoydeaar = [50, 76, 87, 96] hoydeaar = [] hoydeaar = [0] * 4 Sette en enkeltverdi: hoydeaar[0] = 5 hoydeaar[2] = 8 Bruke enkeltverdi print(hoydeaar[2]) Liste 0 1 2 3 5 0 8 0

Definere en liste: hoydeaar = [50, 76, 87, 96] hoydeaar = [] hoydeaar = [0] * 4 Sette en enkeltverdi: hoydeaar[0] = 5 hoydeaar[2] = 8 Bruke enkeltverdi 8 print(hoydeaar[2]) Liste 0 1 2 3 5 0 8 0

Utvide en liste

Først definere en tom liste hoydeaar = [] Utvide en liste

Først definere en tom liste hoydeaar = [] Utvide med en enkeltverdi: hoydeaar.append(50) Utvide en liste 0 50

Først definere en tom liste hoydeaar = [] Utvide med en enkeltverdi: hoydeaar.append(50) hoydeaar.append(76) Utvide en liste 0 1 50 76

Først definere en tom liste hoydeaar = [] Utvide med en enkeltverdi: hoydeaar.append(50) hoydeaar.append(76) Konkatenere lister Utvide en liste print( [50,76] + [87,96] ) 0 1 2 3 50 76 87 96

Først definere en tom liste hoydeaar = [] Utvide med en enkeltverdi: hoydeaar.append(50) hoydeaar.append(76) Konkatenere lister Utvide en liste print( [50,76] + [87,96] ) hoydeaar = hoydeaar + [87,96] 0 1 2 3 50 76 87 96

Liste - funksjonalitet Kan inneholde alle typer verdier min_liste = [1.5, 2.9, 1.0] min_liste = ["Oslo", "Bergen"] Lengde av liste:

Liste - funksjonalitet Kan inneholde alle typer verdier min_liste = [1.5, 2.9, 1.0] min_liste = ["Oslo", "Bergen"] Lengde av liste: len(min_liste) 2

Liste - funksjonalitet Kan inneholde alle typer verdier min_liste = [1.5, 2.9, 1.0] min_liste = ["Oslo", "Bergen"] Lengde av liste: len(min_liste) Sjekke om en verdi finnes: 2

Liste - funksjonalitet Kan inneholde alle typer verdier min_liste = [1.5, 2.9, 1.0] min_liste = ["Oslo", "Bergen"] Lengde av liste: len(min_liste) Sjekke om en verdi finnes: 2 "Bergen" in min_liste True

Liste - funksjonalitet Kan inneholde alle typer verdier min_liste = [1.5, 2.9, 1.0] min_liste = ["Oslo", "Bergen"] Lengde av liste: len(min_liste) Sjekke om en verdi finnes: "Bergen" in min_liste "Trondheim" in min_liste 2 True False

Noen tjenester som lister tilbyr Telle liste = [1945, 1814, 1905, 1945] print( liste.count(1945) ) # 2 Sortere liste.sort() print( liste ) # [1814, 1905, 1945, 1945]

En streng er en spesiell type liste tekst = "kamel" sorted(tekst) # "aeklm" tekst.count("m") # 1 tekst.append("a") #streng er immutable - kan ikke endres print( list(tekst) ) # ["k","a","m","e","l"] (vanlig liste av bokstaver)

Hva skrives ut? vest = ["Hallo", "Bergen"] midt = ["Trondheim"] print( vest + midt) nord = ["Alta", "Kautokeino"] vest = nord + vest print(vest) nord.append("narvik") print(nord) lengde = len(vest+nord) print(lengde) ['Hallo', 'Bergen', 'Trondheim'] ['Alta', 'Kautokeino', 'Hallo', 'Bergen'] ['Alta', 'Kautokeino', 'Narvik'] 7

En liten oppgave A. Lag en liste med fem terningkast (tall fra 1 til 6) som du leser inn fra tastaturet (input) Prøv selv med blyant og papir! Etterpå diskuter med nabo

En liten oppgave A. Lag en liste med fem terningkast (tall fra 1 til 6) som du leser inn fra tastaturet (input) B. Brukeren spiller yatsy og vil bruke sitt kast som firere - hvor mange poeng får brukeren (hun får fire poeng for hver firer hun har) Prøv selv med blyant og papir! Etterpå diskuter med nabo

Løsning på A (lage liste med fem terningkast) {firere1.py}

Løsning på B (telle poeng for firere) {firere2.py}

Plan for dagen Objekter og tjenester Lister Mengder Ordbøker Nøstede samlinger

Mengder Fagene man tar et semester Har ingen spesifikk rekkefølge (hva er fag 1, 2 og 3..) Alle fag må være ulike (kan ikke ta IN1000 og IN1000) Kan representeres med en liste, men: Får uansett en rekkefølge (som dog kan ignoreres): ["IN1000","IN1020","IN1050"] Ingenting hindrer å ha samme fag to ganger: ["IN1000","IN1000","IN1000"]

Mengder Mengde: En samling av ulike verdier Det vil si: a) uten ordning, b) kun ulike verdier Mengde i Python: min_mengde = set( [1,5,1,1] )

Mengder Mengde: En samling av ulike verdier Det vil si: a) uten ordning, b) kun ulike verdier Mengde i Python: min_mengde = set( [1,5,1,1] ) len(min_mengde) 2

Mengder Mengde: En samling av ulike verdier Det vil si: a) uten ordning, b) kun ulike verdier Mengde i Python: min_mengde = set( [1,5,1,1] ) len(min_mengde) 2 print(min_mengde) set([1, 5])

Mengder Mengde: En samling av ulike verdier Det vil si: a) uten ordning, b) kun ulike verdier Mengde i Python: min_mengde = set( [1,5,1,1] ) len(min_mengde) print(min_mengde) 5 in min_mengde 2 set([1, 5]) True

Mengder Mengde: En samling av ulike verdier Det vil si: a) uten ordning, b) kun ulike verdier Mengde i Python: min_mengde = set( [1,5,1,1] ) len(min_mengde) print(min_mengde) 5 in min_mengde min_mengde[1] 2 set([1, 5]) True

En liten oppgave Oppgave: Gitt en liste med fem terningkast (fem tall fra 1 til 6), fortell brukeren om hun har fått yatsy (holder å skrive True/False) (skriv kun kode for å finne ut om yatsy - anta at du allerede har en variabel med liste av terningkast,f.eks: terninger = [3,5,3,3,3] Prøv selv med blyant og papir! (3 minutt) (NB! Bruk tiden på å tenke, ikke skrive - løsningen kan være veldig kort)

{yatzy.py} Løsning

Oppgave: En liten nøtt Gitt en liste med fem terningkast (fem tall fra 1 til 6), fortell brukeren om hun har fått hus (tre av ett terningkast, og to av et annet) Løs det gjerne ved å kombinere teknikkene fra firere og yatzy (count og mengder) Løs gjerne først følgende oppgave: Brukeren mangler kun fire like og hus. Fortell brukeren om hun har fått noe hun kan bruke (uten å skille mellom hvilken av de to) Hint: Hvordan kan det ha seg at denne oppgaven er enklere!? Prøv selv med blyant og papir! Etterpå diskuter med nabo!

Løsning på hus eller fire like {hus_eller_4like.py}

{hus.py} Løsning på hus

Plan for dagen Objekter og tjenester Lister Mengder Ordbøker Nøstede samlinger

Ordbøker (dictionaries) Tilbake til listen hoydeaar: [50, 76, 87, 96] En samling av fire ulike høyder En slags ordbok fra alder til høyde: 0->50, 1->76, 2->87, 3->96 Hva om man vil legge til én ekstra sammenheng? 18->179 Hva gjør man med indeksene mellom 3 og 18? [50, 76, 87, 96, 0, 0, 0,0,0,0,0,0,0,0,0,0, 0, 0, 179]?? Man bruker heller en ordbok (dict) {0:50, 1:76, 2:87, 3:96, 18:179}

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 en liste: by["norge"] Oslo

Ordbok - funksjonalitet Lage en liste min_ordbok = {} min_ordbok = {"Norge": 47, "Tyskland": 49} Legge til ekstra element min_ordbok["italia"] = 39 Slå opp i ordlisten

Ordbok - funksjonalitet Lage en liste min_ordbok = {} min_ordbok = {"Norge": 47, "Tyskland": 49} Legge til ekstra element min_ordbok["italia"] = 39 Slå opp i ordlisten 49 47 print(min_ordbok["tyskland"] - min_ordbok["norge"]) 2

Ordbok - funksjonalitet Lage en liste min_ordbok = {} min_ordbok = {"Norge": 47, "Tyskland": 49} Legge til ekstra element min_ordbok["italia"] = 39 Slå opp i ordlisten print(min_ordbok["tyskland"] - min_ordbok["norge"]) 2 Sjekke hvilke nøkkelverdier den inneholder

Ordbok - funksjonalitet Lage en liste min_ordbok = {} min_ordbok = {"Norge": 47, "Tyskland": 49} Legge til ekstra element min_ordbok["italia"] = 39 Slå opp i ordlisten print(min_ordbok["tyskland"] - min_ordbok["norge"]) Sjekke hvilke nøkkelverdier den inneholder "Norge" in min_ordbok True 2

Ordbok - funksjonalitet Lage en liste min_ordbok = {} min_ordbok = {"Norge": 47, "Tyskland": 49} Legge til ekstra element min_ordbok["italia"] = 39 Slå opp i ordlisten print(min_ordbok["tyskland"] - min_ordbok["norge"]) Sjekke hvilke nøkkelverdier den inneholder "Norge" in min_ordbok 47 in min_ordbok True False (sjekker kun nøklene!) 2

Oppgave: Skandinavia-orakel Endre hovedstads-programmet fra uke1 til å basere seg på en ordbok i stedet for if: land = input("velg land i nordre Skandinavia: ") if land == "Norge": print("oslo") if land == "Sverige": print("stockholm") Prøv selv med blyant og papir! (3 minutt)

{skandinavia.py} Løsning

En liten nøtt person = input("konge: ") etterkommere = {"Oscar":"Haakon", "Haakon":"Olav", "Olav:Harald"} #kode som setter variabel barnebarn #med riktig verdi her... print("barnebarn: " + barnebarn)

{barnebarn.py} Løsning

Plan for dagen Objekter og tjenester Lister Mengder Ordbøker Nøstede samlinger

Nøstede lister En liste er en samling av verdier Hver verdi kan igjen være en liste Man får da en liste av lister frokoster = [ ["egg", "bacon"], ["ost", "agurk", "tomat"] ] Merk doble hakeparanteser og komma mellom lister Rekkefølge/indeks kan være av betydning

En spesifikk type nøstet liste: Matrise (tabell) 1 2 3 4 5 6

En spesifikk type nøstet liste: Matrise (tabell) 1 2 3 En liste av rader Hver rad er en liste 4 5 6

En spesifikk type nøstet liste: Matrise (tabell) 1 2 3 En liste av rader Hver rad er en liste t = [ [1,2,3], [4,5,6] ] assert t[1][2]==6 4 5 6

En spesifikk type nøstet liste: Matrise (tabell) t[0][0] t[0][1] t[0][2] 1 2 3 En liste av rader Hver rad er en liste t = [ [1,2,3], [4,5,6] ] assert t[1][2]==6 t[1][0] t[1][1] t[1][2] 4 5 6

En spesifikk type nøstet liste: Matrise (tabell) 1 2 3 En liste av kolonner Hver kolonne er en liste 4 5 6

En spesifikk type nøstet liste: Matrise (tabell) 1 2 3 En liste av kolonner Hver kolonne er en liste t = [ [1,4], [2,5], [3,6] ] assert t[2][1]==6 4 5 6

En spesifikk type nøstet liste: Matrise (tabell) t[0][0] t[1][0] t[2][0] 1 2 3 t[0][1] t[1][1] t[2][1] En liste av kolonner Hver kolonne er en liste t = [ [1,4], [2,5], [3,6] ] assert t[2][1]==6 4 5 6

Nøstede samlinger Man kan nøste i flere enn 2 nivåer liste = [ [ [1,2], [3,4,5] ], [ [11,12], [13,14,15] ] ] assert liste[1][0][1] == 12 Man kan nøste andre typer samlinger: landinfo = { "byer": {"Norge":"Oslo", "Tyskland":"Berlin"}, "tlf": {"Norge": 47, "Tyskland": 49} } assert landinfo["tlf"]["norge"] == 47 Man kan blande ulike typer samlinger: frokoster = { "tung": ["egg", "bacon"], "lett": ["ost", "agurk", "tomat"] } assert frokoster["lett"][1] == "agurk"

Oppgave Gitt en 2x2-tabell som nøstet liste, finn ut om all radsummer og kolonnesummer er like. 5 3 3 5 8 8 8 8 [ [5,3], [3,5] ] tab = [ [5,3], [3,5] ] #Skriv kode her som setter variabelen alle_like print(alle_like) Prøv selv med blyant og papir!

{tabell.py} Løsning

Oppsummering: Egenskaper ved de tre typene samlinger Liste (list) En samling verdier i bestemt rekkefølge med indeks fra 0 og oppover Typisk: hva finnes på en bestemt lokasjon i lista? Mengde (set) En samling ulike verdier uten rekkefølge Typisk: finnes en bestemt verdi i mengden? Ordbok (dict) En samling av koblinger fra én verdi (nøkkelverdi) til en annen Typisk: hvilken verdi er koblet til en bestemt nøkkel?

Lage de nye typene Lage en tom samling Liste: [] Mengde: set() Ordbok: {} Legge til i samlingen: min_liste.append(ny_verdi) min_mengde.add(ny_verdi) objekter min_ordbok[ny_nokkel] = ny_koblet_verdi

Tjenester for de nye typene objekter Lister, mengder og ordbøker tilbyr litt ulike tjenester Eksempel: om noe finnes i samlingen Liste: om noe finnes eller hvor mange ganger Mengde: om noe finnes (aldri mer enn en gang..) Ordbok: om noe finnes som nøkkelverdier

Begrensende måter å bruke liste på Array En klassisk type liste som er begrenset til å ha en fast størrelse, og elementer av en bestemt type Dette kan tillate effektiv representasjon i en datamaskin Stakk (først-inn-sist-ut) En type samling hvor man kun kan legge til og fjerne elementer fra slutten av samlingen (append og pop) Kø (først-inn-først-ut) En type samling hvor man kun kan legge til elementer i slutten og kun fjerne fra starten av samlingen

Oppsummering Lister gjør det mulig å jobbe med mange verdier Kan slå opp direkte på verdien i en bestemt posisjon Man har flere typer samlinger til disposisjon: Lister, mengder, ordbøker

Hva som er viktig fra dagens forelesing At ulike verdier (tekster, lister osv) er objekter som tilbyr tjenester Men ikke viktig å huske akkurat hvilke tjenester de ulike typene objekter tilbyr Hva lister, mengder og ordbøker kan brukes til, samt hva som overordnet skiller de tre Men den eksakte syntaksen er ikke så kritisk for nå