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

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

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

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

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

Dictionary er et objekt som lagrer en samling av data. Minner litt om lister men har klare forskjeller:

Python: Mengder og Dictionaries 3. utgave: Kapittel 9

Python: Mengder og Dictionaries 3. utgave: Kapittel 9

Dictionary er et objekt som lagrer en samling av data. Minner litt om lister men har klare forskjeller:

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

TDT4110 Informasjonsteknologi grunnkurs: Python: Repetisjon. Professor Alf Inge Wang

TDT4110 Informasjonsteknologi grunnkurs: Programmering: En større case. Professor Alf Inge Wang

Læringsmål og pensum. En større case. Mål Lære å lage større og sammensatte programmer Pensum Kapitlene 1-9 og 12.

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

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

Oppsummering fra sist

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.

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Et større case. Terje Rydland - IDI/NTNU. Lære å lage større og sammensatte programmer

INF120: Oblig 3. Yngve Mardal Moe

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.

TDT4110 Informasjonsteknologi grunnkurs: Tema: Filer og unntak ( exceptions ) - 3rd edition: Kapittel 6. Professor Alf Inge Wang

Læringsmål og pensum. Inn- og utoperasjoner 21/10/16

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

TDT4110 Informasjonsteknologi grunnkurs: Tema: Mer om strenger. - 3rd edition: Kapittel 8. Professor Alf Inge Wang

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

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Filer og unntak (exceptions) Utgave 3: Kap. 6. Terje Rydland - IDI/NTNU

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 7 Filer og unntak ( exceptions ) Professor Alf Inge Wang Stipendiat Lars Bungum

Tirsdag 21/11. Onsdag 24/11. Tirsdag 12/12. TDT4110 Informasjonsteknologi grunnkurs: Tema: Et større case

Læringsmål og pensum. v=nkiu9yen5nc

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

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

Python: Lister og tupler Gaddis: Kapittel 7

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 1 Introduksjon til Programmering og Python. Professor Alf Inge Wang

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

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

Øvingsforelesning 9 i Python (TDT4110)

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

TDT4110 Informasjonsteknologi grunnkurs: Uke 48 Oppsummering/Spørretime. Professor Alf Inge Wang

Python: Intro til funksjoner. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Python: Variable og beregninger, input og utskrift. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Læringsmål og pensum. Algoritmeeffektivitet

TDT4110 Informasjonsteknologi grunnkurs: Tema: Algoritmer i praksis. Professor Alf Inge Wang

TDT4110 IT Grunnkurs Høst 2015

Lage større programmer (Python, relatert til teoridelen om Software Engineering ) TDT 4110 IT Grunnkurs Professor Guttorm Sindre

Læringsmål og pensum. Intro til returverdifunksjoner: Generering av tilfeldige tall 27/09/16

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

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

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

TDT4110 Informasjonsteknologi grunnkurs: Tema: Funksjoner med retur og moduler. - 3rd edition: Kapittel Professor Alf Inge Wang

Øvingsforelesning 7 i Python (TDT4110)

Læringsmål og pensum. Oversikt

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

Læringsmål og pensum. Designe et program

Repetisjon, del 1. TDT 4110 IT Grunnkurs Professor Guttorm Sindre

Repetisjon, del 2. TDT 4110 IT Grunnkurs Professor Guttorm Sindre

TDT4110 Informasjonsteknologi grunnkurs: Eksempler. Mangekanter

PGZ - Hangman Ekspert Python Lærerveiledning

TDT4110 IT Grunnkurs Høst 2014

TDT4105 Informasjonsteknologi, grunnkurs

Øvingsforelesning 1 Python (TDT4110)

Python: Filer og unntak Gaddis: Kapittel 6

Filbehandling Tekstfiler

TDT4105 Informasjonsteknologi, grunnkurs MatLab: Filbehandling - load, save, type - fopen, fgetl, feof, fprintf, fclose

TDT4110 Informasjonsteknologi grunnkurs: Tema: Funksjoner med retur og moduler Utgave 3: Kap

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

Systemutvikling (Software Engineering) TDT 4110 IT Grunnkurs Professor Guttorm Sindre

TDT4110 IT Grunnkurs Høst 2016

Håndtere mange verdier

I dag skal vi ved hjelp av ganske enkel Python-kode finne ut om det er mulig å tjene penger på å selge og kjøpe en aksje.

Python: Variable og beregninger, innlesing fra tastatur utskrift til skjerm. TDT4110 IT Grunnkurs Professor Guttorm Sindre

TDT4110 Informasjonsteknologi grunnkurs: Tema: Mer om strenger Utgave 3: Kap. 8

Python: Strenger 3. utgave: Kapittel 8

Informasjon Prøveeksamen i IN1000 høsten 2018

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

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab. Rune Sætre / Anders Christensen {satre, anders}@idi.ntnu.

IN1000 Obligatorisk innlevering 7

Designe et program. TDT4110 Informasjonsteknologi grunnkurs: Kapittel 2 Python: Bruk av funksjoner, variabler og input/output. Mål.

Løse reelle problemer

Hangman. Level. Introduksjon

TDT4110 IT Grunnkurs Høst 2016

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 2 Python: Bruk av funksjoner, variabler og input/output. Professor Alf Inge Wang

Ta kontakt i pausen. Viktig at vi kommer i gang med dette arbeidet!

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

IN1000 Repetisjonskurs: IO og listeoperasjoner (+ string)

TDT4105 Informasjonsteknologi, grunnkurs

TDT4110 Informasjonsteknologi grunnkurs: Uke 43: Datastrukturer (kap. 8)

Forkurs i informatikk Python. Andreas Færøvig Olsen

Læringsmål og pensum. Oversikt. Systemprogramvare Operativsystemer Drivere og hjelpeprogrammer. To hovedtyper programvare

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 15.

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

Steg 1: Rest etter divisjon

Øvingsforelesning 3 Python (TDT4110)

Objektorientert programmering i Python

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

Hash-funksjoner. Introduksjon. Steg 1: Strekkoder. Eksempel. Skrevet av: Martin Strand

TDT4110 IT Grunnkurs Høst 2014

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

TDT4105 Informasjonsteknologi grunnkurs: Uke 43: Datastrukturer (kap. 8)

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Eivind Storm Aarnæs

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?

Transkript:

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

2 Læringsmål og pensum Mål Lære å forstå og kunne bruke sets Lære å forstå og kunne bruke dictionary Lære å forstå og kunne bruke serialisering av objekter Pensum Starting out with Python, Chapter 9: Dictionaries and Sets

3 Kapittel 9.2 MENGDER (SETS)

4 Datastruktur for mengde (sets) Python har innebygd en datastruktur for å håndtere matematiske mengder (sets på engelsk). Hvert element i en mengde er unik, så du vil ikke få lagt til et element som finnes fra før. Mengder er ikke ordnet: kan ikke anta rekkefølgen. De fleste funksjoner for lister kan brukes for mengder. Mengder har flere spesifikke operasjoner bla.: intersection: Kun elementer representert i begge mengdene union: Alle elementer fra begge mengdene (kun en av hver)

5 Opprette og endre på mengder En mengde opprettes ved å bruke funksjonen set(x) A = set([5,3,3,12]) B = set([true, ost,23.2,92,false]) C = set( aaabcd ) # gir a, b, c, d D = {9,4,1,3} # Lager en mengde Legge til og fjerne elementer fra en mengde: A.add(9) # Legg til ett element A.update([3,4,2]) # Legg til flere elementer B.remove(92) Vi prøver litt..

6 Iterasjon og test av mengder På samme måte som for lister og filer, kan for-løkke brukes for å iterere over en mengde: for x in mengde: print(x) # Skriver ut alle elementer Kan også undersøke om en verdi finnes eller ikke finnes i en mengde ved bruk av in eller not in: if 1 in A: print( Verdien 1 er i mengden A ) if 5 not in A: print( Verdien 5 er ikke i mengden A ) Vi prøver litt

7 Mengdeoperasjoner på A og B Union av to mengder: C = A.union(B) # C blir union av A og B Snitt av to mengder: C = A.intersection(B) # C blir snitt av A og B Forskjellen på to mengder: C = A.difference(B) # Finnes i A, men ikke i B Symmetrisk forskjell på to mengder: C = A.symmetric_difference(B) # Elementer som ikke deles av A og B Sjekke delmengde eller supermengde: A.issubset(B) # Sjekker om A er delmengde av B A.issuperset(B) # Sjekker om A er supermengde av B

8 Oppgave: mengder Skriv Python-koden for å gjøre følgende: Spør bruker om å skrive inn to mengder ved hjelp av input, og lagre dette som mengdene A og B. Skrive ut resultatet til skjerm av følgende: Snitt av A og B (intersection) Union av A og B (union) Forskjell på A og B (difference) Symmetrisk forskjell på A og B (symmetric_difference) Test om A er delmengde av B (issubset) mengder.py

9 Hva kan man bruke mengder til? Lag et program der brukeren skal skrive inn 7 lottotall, og disse tallene skal sjekkes mot en vinnerrekke på 7 pre-definerte tall. Vi ser på to løsninger: Bruk av løkke Bruk av mengde lotto.py

10 Kapittel 9.1 DICTIONARIES

11 Datastruktur: Dictionaries Dictionary er et objekt som lagrer en samling av data. Minner litt om lister men har klare forskjeller: Defineres ved å bruke krøllparanteser { } (ALT+SHIFT 8/9 på Mac) Kan bruke hva som helst som nøkkel(indeks) (ikke bare tall som i lister): A = {} Tekst strenger, Heltall (men trenger ikke å være i rekkefølge), Flyttall, Sannhetsverdier (True eller False), En kombinasjon av de ovenfor # Tom dictionary A[ Kari ] = 92925492 # Oppretter et element tlf={ Jo':73540000, Per':92542312,'Else':54239212} print(tlf[ Per ]) # Skriver ut verdien 92542312

12 Bruk av operatorene in og not in i Dictionaries Man kan bruke in og not in i dictionaries for å sjekke om elementer finnes (som lister og set): tlf={ Jo':73540000, Per':92542312,'Else':54239212} if ( Per in tlf): print(tlf[ Per ]) if ( Lars not in tlf): print( Lars er ikke i dictionarien )

13 Operasjoner for dictionaries Operasjon Forklaring len(d) d[k] d[k] = v del d[k] d.clear() d.copy() Antall elementer i d Verdi til element i d med nøkkel k Sett element k til verdi v Slett element k i d Fjerne alle element i d Lag kopi av d d.has_key(k) Fjernet i Python 3. Må bruke in i stedet. Oprasjon d.items() d.keys() d.values() d.get(k) d.get(k,v) Forklaring Returnerer liste av (nøkkel,verdi) par Returnerer liste av nøkler i d Returnerer liste av verdier i d Samme som d[k] Returnerer d[k] hvis k er gyldig, ellers v dictionary_metoder.py

14 Ulike datatyper i dictionaries Dictionaries kan brukes til å representere sammensatt informasjon ved hjelp av lister. Lister gjør det mulig å knytte en nøkkel til ulike typer data. Eks. lagre telefonnummer, adresse og om vedkommende har betalt i en dictionary: db = {} # Oppretter dictionary db[90503020]=[ Jo, Logata 4, 7000 Trd,True] db[50201020]=[ Ann, Gaamannv. 2, 5000 Bergen,False] print(db[90503020]) # skriver ut lista med data for Jo Husk å velg nøkler som er unike!

15 for-løkke og dictionary Bruker man for-løkke på en dictionary, løper man igjennom nøklene til dictionary: d = { navn : Per, alder :28, IQ :29} for x in d: # går igjennom nøkler i d print(x) # skriver ut nøklene navn, alder, IQ For å sikre gjennomgang av nøkler alfabetisk: for x in sorted(d.keys()): # sorterer nøkler print(x) for_dictionary.py

16 Nyttig bruk av dictionary Ettersom vi kan bruke hva som helst som nøkkel i en dictionary, egner den seg svært godt til å telle forekomster i strenger, i lister eller lignende. f = {} # Oppretter dictionary for å telle forekomster for element in liste: # sjekker elementer i ei liste f[element] = f.get(element,0) +1 # Legg til +1 i dictionary med nøkkel element Vi ser på et eksempel telling_dictionary.py

17 Kapittel 9.3 SERIALISERING AV OBJEKTER

18 Serialisering av objekter Serialisering av objekter er prosessen å konvertere et objekt til en strøm av bytes som kan lagres til fil, som senere kan lastes inn igjen. En persistent variabel, betyr at verdier overlever selv om man avslutter Python og avslutter datamaskinen. Python har biblioteket pickle som gjør det mulig å lagre og laste dictionary til/fra disk.

19 Lagre dictionary til disk For å lagre en dictionary til disk kan biblioteket pickle brukes sammen med metoden dump. Må åpne en fil som binærfil og ikke som tekst, ettersom det er mer enn tekst som lagres (struktur): db={ Jo :[10, Skogata 3 ], Per :[20, Heigt 2 ]} import pickle # Importerer modulen pickle f = open( database.dat, wb ) # b=binary pickle.dump(db,f) # Dumper db til disk f.close() # Stenger fila lagre_dictionary.py

20 Laste inn dictionary fra disk Laste inn dictionary fra disk gjøres ved hjelp av load metoden i pickle-biblioteket. Husk at åpne fila som binærfil og ikke tekst. import pickle f = open( database.dat, rb ) # r=read, b=binary data = pickle.load(f) # Laster inn dict fra disk f.close() laste_dictionary.py

21 Oppsummering Sets er nyttige for å gjøre operasjoner på mengder: intersection og union Sets defineres ved å bruke funksjonen set(liste) Dictionary ligner på lister men man kan bruke hva som helst som nøkkel (indeks). Opprettes ved å bruke A = {} eller A = { navn : Petter Ole } En fordel med dictionary er at man ikke trenger en indeks som er i rekkefølge. Det finnes flere kommandoer som man kan bruke på dictionary. Dictionary oppfører seg som en database.