TDDE44 Programmering, grundkurs

Relevanta dokument
729G74 IT och programmering, grundkurs. Tema 3. Föreläsning 2 Jody Foo,

729G74 IT och programmering, grundkurs. Tema 3. Föreläsning 1 Jody Foo,

729G04 Programmering och diskret matematik. Python 6: Abstrakta datatyper

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

729G74 - IT och programmering, grundkurs. Dugga.

729G04 Programmering och diskret matematik. Python 3: Loopar

Tenta (TEN3) i kursen 729G04 Programmering och diskret matematik 5 feb 2016, kl 14:00-18:00

Uppgifter till tenta i 729G04 Programmering och diskret matematik. 17 december 2015, kl 14:00-18:00

729G04 Programmering och diskret matematik. Föreläsning 7

729G04 PYTHON 6 JODY FOO. Department of Computer and Information Science (IDA) Linköping University, Sweden

729G04 Programmering och diskret matematik

Uppgifter till tenta i 729G04 Programmering och diskret matematik. 7 augusti 2015, kl 08:00-12:00

Övningsuppgifter kapitel 8

Python. Datatyper. Mer om datatyper. Heltal - 3 Flyttal - 2,456 Listor - [1,2,3,4] Strängar - spam!

729G74 IT och programmering, grundkurs. Tema 2. Föreläsning 3 Jody Foo,

Föreläsning 18 Filer och avbildningar

729G74 IT och programmering, grundkurs. Tema 2, Föreläsning 2 Jody Foo,

729G04 Programmering och diskret matematik

Ordlistor, filhantering och ut på webben. Linda Mannila

Programmering för språkteknologer II, HT2014. Rum

Introduktion till programmering SMD180. Föreläsning 8: Listor

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Läsöversikt. Föreläsningar 2-6. Genomförande av laborationer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Introduktion till programmering D0009E. Föreläsning 9: Tupler och dictionaries

729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer

729G74 IT och programmering, grundkurs. Tema 1, Föreläsning 3 Jody Foo,

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

ADT Set, Map, Dictionary. Iteratorer TDDD86: DALGP. Tommy Färnqvist, IDA, Linköpings universitet

Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python

729G74 IT och programmering, grundkurs. Tema 2. Föreläsning 3 Jody Foo,

Abstrakta datatyper Laboration 2 GruDat, DD1344

TDDE44 Programmering, grundkurs

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 5 Erik Nilsson, Institutionen för Datavetenskap, LiU

729G06 Föreläsning 1 Objektorienterad programmering

Pythons standardbibliotek

Länkade strukturer. (del 2)

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

MicroPython Ett textbaserad programmeringsspråk för Micro:bit

Arrayer (vektorer) Murach s: kap Elektronikcentrum i Svängsta AB

TDP002 - Imperativ programmering

Beräkningsvetenskap föreläsning 2

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Laboration: Whitebox- och blackboxtesting

Planering Programmering grundkurs HI1024 HT TIDAA

Planering Programmering grundkurs HI1024 HT data

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

TDP002 - Imperativ programmering

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

TDIU01 - Programmering i C++, grundkurs

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Föreläsning 6: Introduktion av listor

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2

Imperativ programmering. Föreläsning 2

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Grundläggande datalogi - Övning 1

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Programmering och algoritmiskt tänkande. Tema 3, föreläsning 1 Jody Foo

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

Objektorienterad Programkonstruktion. Föreläsning 9 30 nov 2016

Grundläggande Datalogi

Planering Programmering grundkurs HI1024 HT 2014

Python. Vi har ofta behov av att behandla datastrukturer på ett enhetligt sätt så att vi kan göra samma sak i flera olika program.

Övning 6. Ali Tofigh 24 Oktober, 2006

Grundläggande databehandling ht 2005

TDP002 Imperativ programmering

729G04 Programmering och diskret matematik

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC74 Programmering, abstraktion och modellering. Tentamen

DD1320 Tillämpad datalogi. Lösning (skiss) till tenta 20 okt 2011

Objektorienterad programmering

Programmering II (ID1019) :00-17:00

Programmering för språkteknologer II, HT2011. Rum

ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

Föreläsning 2 Programmeringsteknik och C DD1316

Språket Python - Del 1 Grundkurs i programmering med Python

Erfarenheter från labben

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Föreläsning 4 Innehåll

Att förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Objektorienterad Programmering (TDDC77)

Klasser och objekt, referenser Grundkurs i programmering med Python

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

725G61 - Laboration 5 Grundläggande objektorientering. Johan Falkenjack

Funktionell programmering DD1361

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Statistik över heltal

Exempel: Exempel: Exempel: Exempel: $djur=array("ko","katt","älg"); foreach ($djur as $d) { echo $d. " "; } Resultat. ko katt älg

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Programmering, grundkurs

Transkript:

TDDE44 Programmering, grundkurs Föreläsning 5 Jody Foo, jody.foo@liu.se

Föreläsning 5 & 6 Laboration 3: En egen pokedex data från webben Ny datatyp: dictionary Mer om dataabstraktion Nästlade datastrukturer Bearbetning av nästlade datastrukturer Rekursion

Korrigering från förra föreläsningen Fel: Alla värden förrutom 0, False och None är sanna Rätt: Alla värden förrutom 0, False, None, tomma sekvenser och tomma dictionarys är sanna.

Laboration 3 Del 1: Pythonuppgifter 3 Del 2: Egen Pokedex; hämta information från webben

Kort om laboration 3, del 2 Hämta information från webben istället för från fil Nytt textbaserat data-format: JSON Webb-API:er - om URL:er vore funktioner PokeAPI - ett webb-api till en databas om Pokémon pokedex.py - skript som skriver ut information om en pokémon.

Ny datatyp: dictionary

Dictionaries Ett dictionary har element precis som en lista, men istället för index, kommer man åt elementen med via nycklar. Varje nyckel är associerat med ett värde. Alla datatyper som är oföränderliga (immutable) kan användas som nycklar, t.ex. flyttal, heltal, strängar, tupler Till skillnad från en lista, finns det ingen bestämd ordning på nyckel-värde-paren i ett dictionary.

Dictionaries - en mängd nyckelvärde-par # Ett dictionary omges av {} och består av nycklar och värden: # { nyckel_1:värde1, # nyckel_2:värde2, #..., # nyckel_n:värde_n } # Exempel dictionary1 = {"nyckel1":"värde 1", 345:"värde 2", 3:54 } Ett dictionary används för att lagra värden med associativ åtkomst, dvs att en nyckel kan användas för att komma åt ett värde. Som en lista, men med nycklar istället för index. Som nyckel kan alla oföränderliga (immutable) datatyper användas. Alla datatyper kan vara värden.

Istället för index använder vi nyckeln In [1]: dictionary1 = {"nyckel1":"värde 1", 345:"värde 2", 3:54 } In [2]: dictionary1["nyckel1"] Out[2]: 'värde 1' In [3]: dictionary1[345] Out[3]: 'värde 2' In [4]: dictionary1[3] Out[4]: 54 In [5]: Jämfört med en lista så använder vi nyckeln istället för index för att "komma åt" värdena.

Vi kan ändra värden genom att använda nyckeln In [5]: dictionary1 = {"nyckel1":"värde 1", 345:"värde 2", (3):54 } In [6]: dictionary1["nyckel1"] Out[6]: 'värde 1' In [7]: dictionary1["nyckel1"] = 1024 In [8]: dictionary1["nyckel1"] Out[8]: 1024 Precis som att man kan ange ett index vid tilldelning av ett värde på ett element i en lista, så kan man ange en nyckel vid tilldelning av ett associerat värde i en dictionary.

Vi kan lägga till element till ett dictionary In [9]: dictionary1 = {"nyckel1":"värde 1", 345:"värde 2", (3):54 } In [10]: dictionary1["ny nyckel"] = "nytt värde" In [11]: dictionary1["böcker"] = ["bok 1", "bok 2", "bok 3"] In [12]: dictionary1["ny nyckel"] Out[12]: 'nytt värde' In [13]: dictionary1["böcker"] Out[13]: ['bok 1', 'bok 2', 'bok 3'] Till skillnad från att använda index som är större än längden på listan, så kan man lägga till nya värden i ett dictionary genom att använda en ny nyckel.

Ny operator: in Operatorn in kan användas på sekvenser (listor och strängar) samt dictionaries. Returnerar True om den hittar det sökta elementet i sekvensen/ bland dictionaryts nycklar. OBS! Inte samma som det in som används i samband med en forloop "a" in "Python är ett programmeringsspråk" True 4 in [1, 2, 3, 4] True 4 in [1, 2, 3, [4]] False "hej" in { "ja": "yes", "nej": "no", "hej": "hello" } True

Vad kan användas som en nyckel? OK att använda som nycklar: siffror, strängar Inte OK att använda som nycklar: listor, dictionaries Varför kommer vi prata om lite längre fram i kursen.

Loopa igenom ett dictionary

Alla nycklar/värden/nyckelvärdepar för ett dictionary Punktnotation för att komma åt alla nycklar: dict.keys() värden: dict.values() nyckel-värdepar: dict.items() "dict" refererar till ett värde av typen dictionary, denna notation används även i pythondokumentationen Funktioner som anropas via punktnotation kallas för metoder. Metoderna dict.keys(), dict.values() och dict.items() returnerar en "vy" in i dictionary-värdet.

Vi kan loopa genom nycklar i ett dictionary # loopa genom nycklar, explicit (ingen _bestämd_ ordning finns) for key in dictionary1.keys(): print("key: " + key) print("value: " + dictionary1[key]) # loopa genom nycklar, implicit (ingen _bestämd_ ordning finns) for key in dictionary1: print("key: " + key) print("value: " + dictionary1[key]) Vi kan komma åt alla nycklar antingen implicit eller explicit. Operatorn in kan också användas på nycklarna implicit: if key_i_am_looking_for in dictionary1

Vi kan loopa genom värden i ett dictionary # loopa genom värden, explicit (ingen _bestämd_ ordning finns) for value in dictionary1.values(): print("value: " + value) dict.values(), precis som dict.keys() ger en struktur (ett view objekt) som beter sig som en lista (men det är ingen riktig lista). Se https://docs.python.org/release/3.3.0/library/stdtypes.html#dict-views för mer information.

Dataabstraktion Strukturera information

Abstraktion programabstraktion: dela upp problem i delproblem, dela upp en funktion i flera funktioner dataabstraktion: koppla ihop och strukturera information

Dataabstraktion # en variabel per värde pokemon_name = "pidgey" ability1 = "big-pecks" ability2 = "tangled-feet" ability3 = "keen-eye" Hur gör vi om vi vill ha information om fler eller färre "abilities" på ett smidigt sätt?

Dataabstraktion pokemon_name = "pidgey" # listor kan användas för att lagra 0 eller fler värden abilities = ["big-pecks", "tangled-feet", "keen-eye"] Listor kan användas för information som kan fler än ett värde. Hur gör vi om vi vill ha information om flera pokemons? Ska vi ha pokemon_name1, pokemon_name2, abilities1, abilities2?

Dataabstraktion pokemon1 = ["pidgey", ["big-pecks", "tangled-feet", "keen-eye"]] pokemon2 = ["ditto", ["imposter", "limber"]] Vi kan samla ihop informationen om varje pokemon till en lista samt bestämma den ordning som informationen ska komma i.

Dataabstraktion pokemon = [ ["pidgey", ["big-pecks", "tangled-feet", "keen-eye"]], ["ditto", ["imposter", "limber"]] ] Vi kan sedan samla ihop alla enskilda pokemons till ytterligare en lista!

Dataabstraktion pokemon = [ { "name": "pidgey", "abilities": ["big-pecks", "tangled-feet", "keen-eye"] }, { "name": "ditto", "abilities": ["imposter", "limber"] } ] Vi hade även kunnat använda ett dictionary för att representera en Pokémon.

Abstrakta datatyper (ADT) Barbara Liskov, Stephen Zilles. 1974. "Programming with abstract data types" Abstrakt datatyp datastruktur funktioner som används på dessa datastrukturer Föregångare till en objektorienterad approach.

Exempel på abstrakt datatyp Kö lista med element är kön, index 0 är nästa på tur funktionen create_empty_queue() som returnerar en tom kö funktionen enqueue(value, queue) som lägger till värdet value till slutet på kön queue funktionen dequeue(queue) som returnerar nästa värde i kön och plockar även bort det från kön

Bearbetning av nästlade datastrukturer

Nästlade datastrukturer A är en nästlad datastruktur om A innehåller flera värden Ett av värdena i A i sin tur innehåller flera värden Exempel: [["Ada Lovelace", 1815], ["Joan Clarke", 1917]] [ { "name": "Ada Lovelace", "birthyear": 1815 }, { "name": "Joan Clarke", "birthyear": 1815 } ] { "name": "ditto", "abilities": ["imposter", "limber"] }

Hur kommer vi åt nästlade värden? lista1 = [["a", "b", "c"], ["d", "e", "f"]] # första elementet i lista1 lista1[0] # första elementet i första elementet i lista1 lista1[0][0] # andra elementet i första elementet i lista1 lista1[0][1]

Hur kommer vi åt nästlade värden? dict1 = { "frukter": ["a", "b", "c"], "bilar": ["d", "e", "f"] } # värdet associerat med nyckeln "frukter" dict1["frukter"] # första elementet i listan associerad med nyckeln "frukter" dict1["frukter"][0] # andra elementet i listan associerad med nyckeln "frukter" dict1["frukter"][1]

En nästlad loop för att bearbeta en nästlad datastruktur yttre_lista = [ ["a", "b", "c"], ["d", "e", "f", "g"] ] # skriv ut varje element i listan yttre_lista index1 = 0 while index1 < len(yttre_lista): print(yttre_lista[index1]) index1 += 1 # om vi för varje inre lista i yttre_lista vill skriva ut den # inre listans element? index1 = 0 while index1 < len(yttre_lista): inre_lista = yttre_lista[index1] # kod som skriver ut varje element i inre_lista

En nästlad loop för att bearbeta en nästlad datastruktur yttre_lista = [ ["a", "b", "c"], ["d", "e", "f", "g"] ] # skriv ut varje element i listan yttre_lista index1 = 0 while index1 < len(yttre_lista): print(yttre_lista[index1]) index1 += 1 # om vi för varje inre lista i yttre_lista vill skriva ut den # inre listans element? index1 = 0 while index1 < len(yttre_lista): inre_lista = yttre_lista[index1] # kod som skriver ut varje element i inre_lista index2 = 0 while index2 < len(inre_lista): print(inre_lista[index2]) index2 += 1 index1 += 1

En nästlad loop för att bearbeta en nästlad datastruktur yttre_lista = [ ["a", "b", "c"], ["d", "e", "f", "g"] ] # skriv ut varje element i listan yttre_lista for yttre_element in yttre_lista: print(yttre_element) # om vi för varje inre lista i yttre_lista vill skriva ut den # inre listans element? for yttre_element in yttre_lista: for inre_element in yttre_element: print(inre_element)