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.

Relevanta dokument
Grundläggande datalogi - Övning 2

Ordnad lista. Listor... Ordnad lista... Ordnad lista typer

Länkade listor, stackar och köer

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.

Abstrakta datatyper Laboration 2 GruDat, DD1344

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Datastrukturer och algoritmer

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

Några saker till och lite om snabbare sortering

Övning 1 - Abstrakta datatyper

ADS : STACK ADT: STACK. Stack och Kö -Implementering - Tilllämpningar. Oftast förekommande metoder i Stack. TopOfStack

Sätt att skriva ut binärträd

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

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Sökning i ordnad lista. Sökning och sortering. Sökning med vaktpost i oordnad lista

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Länkade strukturer. (del 2)

Datastrukturer och algoritmer. Föreläsning 4 Test, Stack och Kö

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

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

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

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Datalogi, grundkurs 1

Föreläsning 4 Datastrukturer (DAT037)

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

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Pythons standardbibliotek

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Fredag 10 juni 2016 kl 8 12

Laboration: Whitebox- och blackboxtesting

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Grundläggande datalogi - Övning 3

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Grundläggande datalogi - Övning 4

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Kontinuerliga listor. Fält (listor) Kontinuerliga listor... Kontinuerliga listor...

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter

Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

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

Föreläsning 13 och 14: Binära träd

Datastrukturer och algoritmer

Erfarenheter från labben

Filer. DA2001 (Föreläsning 16) Datalogi 1 Hösten / 19

Tenta i Grundläggande programmering DD klockan

Stack, specifikation. Stack och Kö. Y s t M A p. Stack. <== > Y s t M A p <== > Prioritetskö

Föreläsning 8: Exempel och problemlösning

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036)

Föreläsning 8 Programmeringsteknik och Matlab DD1312. Klassmetod. Egen modul

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

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning 3. Stack

Tentamen i Algoritmer & Datastrukturer i Java

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Föreläsning Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

729G04 Programmering och diskret matematik. Python 3: Loopar

Problemlösning och funktioner Grundkurs i programmering med Python

Övning 6. Ali Tofigh 24 Oktober, 2006

DD1314 Programmeringsteknik

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Övning 1. Abstrakta datatyper. 1. Stacken. class Stack: """A representation of a last-in-first-out (LIFO) stack of objects."""

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

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

Föreläsning 11. ADT:er och datastrukturer

Algoritmer. Två gränssnitt

Datalogi för E Övning 3

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Hur man programmerar. Exempel på problemlösning i Python

En överblick. Pseudo-parallell simulering. Snabbköpsexemplet, forts. Två olika sätt att modellera och simulera. Schedulering

TDDE44 Programmering, grundkurs

Ordlistor, filhantering och ut på webben. Linda Mannila

Tentamen i Introduktion till programmering

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1

Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10

Lektion 2: Sökagenter. Robin Keskisärkkä

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

Programmering grundkurs

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning

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

Föreläsning Datastrukturer (DAT036)

Uppgift 1 ( Betyg 3 uppgift )

Pseudoslumptal / slumptal. Pseudoslumptal... Slumptal exempel. Slumptal exempel

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1

Sammanfattning. Listor. List-manipulering. Matris. /home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111

Användarhandledning Version 1.2

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

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

Föreläsning 3. Stack

Programdesign. minnesutrymme storlek på indata. DA2001 (Föreläsning 15) Datalogi 1 Hösten / 20

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Övning 2. (Länkade) Listor, noder

Sökning och sortering

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

Sökning och sortering. Sökning och sortering - definitioner. Sökning i oordnad lista. Sökning med vaktpost i oordnad lista

Transkript:

Moduler 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. Vi har också ofta behov av att skapa överblick i våra program. Som ett typvärde anges ibland att få människor kan överblicka mer än ett A4 fyllt med programkod. För båda ändamålen har ett hjälpmedel som vi redan har använt några gånger. En modul i är python-programkod som lagts i en egen fil. Typiskt lägger man datastrukturer och funktioner för att bearbeta datastrukturerna eller bara funktioner i filerna. Vi ska se några enkla exempel på hur man kan gå tillväga. DA2001 (Föreläsning 14) Datalogi 1 Hösten 2011 1 / 19

Moduler... Exempel: Filen upcase.py innehåller följande funktion för att göra en ny teckensträng med bara versaler. Ingen bra metod men den fungerar. def upcase(s): res = for c in s: if c >= a and c <= z : res += chr(ord(c) - ord( a ) + ord( A )) elif c == å : res += Å elif c == ä : res += Ä elif c == ö : res += Ö else: res += c return res DA2001 (Föreläsning 14) Datalogi 1 Hösten 2011 2 / 19

Moduler... Följande enkla huvudprogram utnyttjar modulen import upcase while True: try: inp = input( skriv något : ) upc = upcase.upcase(inp) # OBS anropet! print(" ", inp, " efter upcase: ", upc, " ", sep= ) except: print( Hej då! ) break DA2001 (Föreläsning 14) Datalogi 1 Hösten 2011 3 / 19

Moduler... Vi kan inkludera delar av en modul så att vi inte behöver använda filnamnet som prefix: from upcase import upcase while True: try: inp = input( skriv något : ) upc = upcase(inp) # OBS anropet! print(" ", inp, " efter upcase: ", upc, " ", sep= ) except: print( Hej då! ) break DA2001 (Föreläsning 14) Datalogi 1 Hösten 2011 4 / 19

Moduler klass I finns en sorts modul som kallas klass. En klass kan användas som en slags container för vad som helst. Klassbegreppet finns i många programspråk men är lite speciellt i. Eftersom man kan stoppa vad som helst i en klass kan den användas för att kapsla in både datastrukturer, funktioner och andra klasser. Det är lätt att dra parallellen med andra programspråk som kallas objektorienterade men s klasser är mera som säckar där man kan lägga undan vad som helst. Ex.: Med definitionen >>> class container: pass så har vi skapat en behållare för vad som helst DA2001 (Föreläsning 14) Datalogi 1 Hösten 2011 5 / 19

Moduler klass... Nu kan vi skapa ett objekt som fungerar just som en container Först skapar vi objektet: >>> c = container() sedan stoppar vi in något: >>> c.något = skräp >>> c.någotannat = 3 Så kan vi plocka ut det vi lagrat >>> print(c.något) skräp >>> print(c.någotannat) 3 DA2001 (Föreläsning 14) Datalogi 1 Hösten 2011 6 / 19

Moduler enkel ordnad lista Antag att vi vill ha en lista som vi vill manipulera på ett speciellt sätt. Det finns ett förutbestämt gränssnitt: full() empty() full(l) insert(e) delete(k) retrieve(k) clear() Lista DA2001 (Föreläsning 14) Datalogi 1 Hösten 2011 7 / 19

Moduler enkel ordnad lista... full() ger True om listan är full (vilket den inte kan bli) empty() ger True om listan är tom insert(e) stoppar in e på rätt plats i listan retrieve(k) hämtar ut elementet med nyckel k eller skickar ut None om det inte finns något element med nyckel k delete(k) tar bort elementet med nyckel k från listan (om det finns) member(k) ger True om elementet med nyckel k finns i listan clear() tömmer listan DA2001 (Föreläsning 14) Datalogi 1 Hösten 2011 8 / 19

Moduler enkel ordnad lista... class minlista: def key(self, e): return e def init (self, key=none): self. L = [] if key: self. key = key def full(self): return False def empty(self): return len(self. L) == 0 def insert(self, e): self. L.append(e) try: self. L.sort(key=self. key) except: self. L.remove(e) print("kunde inte lägga till: ", e, " ", sep= ) DA2001 (Föreläsning 14) Datalogi 1 Hösten 2011 9 / 19

Moduler enkel ordnad lista... Jag gömmer en lista kallad L inne i modulen. Gömmer är nog inte rätta ordet eftersom den går att komma åt utifrån. Observera att alla funktioner har en formell parameter self, den första om det finns mer än den, som måste finnas med. Konventionen säger att den ska heta self men den kan heta vad som helst. Bäst att följa konventionen. Konventionen (inte regel, alltså) säger också att om det finna en funktion som heter init så ska den köras när man skapar ett objekt, se test-huvudprogrammet ett par bilder framåt. Min init -funktion tar dessutom en parameter som inte behöver skickas med (key=none), där None är default och vi kan se i koden att om man skickar med en funktion så kommer den installeras under namnet _key och användas för identifiering och sortering. I övrigt är det bara funktionen insert som är knepig. Jag sätter in och sorterar men om sorteringen inte fungerar tar jag bort det sist insatta elementet. DA2001 (Föreläsning 14) Datalogi 1 Hösten 2011 10 / 19

Moduler enkel ordnad lista... def delete(self, k): for e in self. L: if self. key(e) == k: self. L.remove(e) return def retrieve(self, k): for e in self. L: if self. key(e) == k: return e def clear(self): while not self.empty(): del self. L[0] def show(self): print(self. L) DA2001 (Föreläsning 14) Datalogi 1 Hösten 2011 11 / 19

Moduler enkel ordnad lista... litet testprogram import minlista kmd = [ full?, empty?, insert, delete, retrieve, member?, clear, show, end ] L = minlista.minlista() while True: kommandorad = input( Kommando: ) kommandolista = kommandorad.split( ) kommando = kommandolista[0] if len(kommandolista) > 1: arg = kommandolista[1] if kommando not in kmd: print("okänt kommando: ", kommando, " ", sep= ) elif kommando == end : break elif kommando == full? : print(l.full()) elif kommando == empty? : print(l.empty()) elif kommando == insert : L.insert(arg) elif kommando == delete : L.delete(arg) elif kommando == retrieve : L.retrieve(arg) elif kommando == member? : L.member(arg) elif kommando == clear : L.clear() elif kommando == show : L.show() DA2001 (Föreläsning 14) Datalogi 1 Hösten 2011 12 / 19

Moduler enkel ordnad lista... test Man kan testa direkt utan testprogram >>> import minlista >>> def k(e): return e[ key ] >>> L = minlista.minlista(key=k) >>> L.empty() True >>> L.full() False >>> L.insert({ key :23, value : tjugotre }) >>> L.insert({ key :56, value : femtiosex }) >>> L.insert({ key :5, value : fem }) >>> L.show() [{ value : fem, key : 5}, { value : tjugotre, key : 23}, { value : femtiosex, key : 56}] >>> L.insert(3) Kunde inte lägga till: 3 DA2001 (Föreläsning 14) Datalogi 1 Hösten 2011 13 / 19

Moduler kö I vissa sammanhang behöver man köa saker och ting, d.v.s. stoppa in dem i en datastruktur tills vidare och sedan hämta dem i samma ordningsföljd för att utföra någon åtgärd. Köer används i många sammanhang, t.ex.: för studium av väntetider, för att lagra händelser i datorn så de kan åtgärdas i tur och ordning, eller för att simulera händelser (tidsnotiser). En kö är en vanlig datastruktur. Man tar alltid ut saker i samma ordning som man stoppar in dem. Det enda man kan göra är stoppa in och ta ut element, eventuellt kolla om kön är tom, eventuellt också kunna tömma kön. enqueue dequeue rear front DA2001 (Föreläsning 14) Datalogi 1 Hösten 2011 14 / 19

Moduler kö... class myqueue: Q = None def init (self): self. Q = [] def full(self): return False def empty(self): return len(self. Q) == 0 def enqueue(self, e): if self.empty(): self. Q = [e] else: self. Q.insert(0, e) def dequeue(self): if self.empty(): return None return self. Q.pop() def show(self): print(self. Q) DA2001 (Föreläsning 14) Datalogi 1 Hösten 2011 15 / 19

Moduler Kö... I modulen har jag gömt en krok för att hänga en lista på: Q = None och i övrigt innehåller modulen endast det grundläggande för att hantera en kö. OBS! att jag har med en kontroll av om kön är full. Behövs inte men många implementationer av kö har en övre begränsning, så för kompatibilitet med andra, mer begränsade köer, finns kontrollen med. Kanske någon använder den. Det är två viktiga punkter: Kompatibilitet med andra implementationer och minimalitet (gör bara det som behövs inget extra). Man måste kunna lita på att den som gjort modulen har gjort så den fungerar enligt alla specifikationer. Man ska inte behöva titta in i koden för att se efter. DA2001 (Föreläsning 14) Datalogi 1 Hösten 2011 16 / 19

Moduler... Stack En annan vanligt speciallista är stack. Man stoppar in och tar ut i samma ände. Först in sist ut. Vanliga användningsområden är anropsstack för rekursion och för beräkning av uttryck. push pop top bottom DA2001 (Föreläsning 14) Datalogi 1 Hösten 2011 17 / 19

Moduler... Stack Funktioner (och gängse terminologi): push(e) pop() empty() full() stoppa in elementet e i stacken hämta ut det sist instoppade elementet och ta bort det ur stacken återsänder True om stacken är tom True om stacken är full Eventuellt också top(), en funktion för att tjuvtitta på översta elementet. I labb 7 kommer ni vara tvungna att bygga en stack. DA2001 (Föreläsning 14) Datalogi 1 Hösten 2011 18 / 19

Moduler som finns i som standard levereras med en massa moduler, bl.a.: math cmath array det mesta man behöver för matematik komplexa tal effektiv hantering av matriser och indexerade listor Dessutom hela bibliotek med moduler för olika ändamål, ibland i stor variation för olika tycke och smak, t.ex. för: GUI (Graphical User Interface) Databasaccess Bildhantering Nätverkshantering Se http://wiki.python.org/moin/usefulmodules här finns länkar till det mesta i modulväg som bjuder på DA2001 (Föreläsning 14) Datalogi 1 Hösten 2011 19 / 19