Grundläggande databehandling ht 2005 Programmering Filip Salomonsson <salo@stp.lingfil.uu.se> 1
Idag Program, programmering Pythonintro 2
Programspråk Lågnivåspråk (maskinspråk); instruktioner på datorns språk. Högnivåspråk abstraherade uttryckssätt som människor lättare förstår. Populära högnivåspråk: Python, Java, Perl, C, C++,... 3
Fördelar med högnivåspråk Lättare att skriva Lättare att läsa(!) Lättare att göra rätt Portabilitet 4
Nackdelar med högnivåspråk Förstås inte direkt av datorn - måste översättas Inte alltid lika effektiva 5
Översättningen Två sätt: Interpretering: en tolk läser programmet och exekverar det (gör som det säger) varje gång programmet ska köras. Kompilering: en kompilator översätter programmet en gång för alla, och sedan används den kompilerade versionen. Den ursprungliga (högnivå-)formen kallas källkod. 6
Program Ett program är en uppsättning instruktioner för hur en beräkning (i vid mening) ska utföras (av datorn). Beräkningen kan vara, typ, vad som helst! Program kan sägas bestå av två huvudkomponenter: Algoritmer är generella beskrivningar av lösningar på specifika klasser av problem Datastrukturer innehåller de data som algoritmerna arbetar med. 7
Programmering Programmering är framför allt problemlösning, och handlar om att formellt beskriva lösningar på (abstrakta) problem. Till detta används något programmeringsspråk, som är formella språk för att uttrycka vissa operationer. inmatning (input) utmatning (output) matematik/aritmetik villkor upprepning Olika programmeringsspråk erbjuder olika nivåer av abstraktion. 8
Programmeringsspråk Programmeringsspråk är formella språk som är utformade för att uttrycka beräkningar. Strikt syntax Entydiga Bokstavliga 9
Python Python is an interpreted, interactive, object-oriented programming language. Ett första program: print "Hello world!" Python består, utöver själva språket, av ett stort standardbibliotek med användbara moduler för att läsa många olika typer av problem. 10
Ett andra program snubbar = [ Stellan, Staffan, Jörgen, Kalle, Tom ] snubbar.sort() # Skriv ut snubbarna for snubbe in snubbar: print snubbe antal = len(snubbar) print "Totalt %d snubbar." % antal 11
Värden och typer Värden är innehållet i de datastrukturer som programmet arbetar med. Varje sådant värde är av en specifik typ. "Hello world!" är ett strängvärde (string). 42 är ett heltalsvärde (integer) [ Stellan, Staffan ] är ett listvärde (list) 12
Variabler (namn) Värden kan lagras genom att skapa namn som refererar till dem. name = "Filip Salomonsson" age = 25 shoesize = 42.5 Namn ordnas i namnrymder. 13
Funktioner En funktion är en uppsättning instruktioner samlade under ett gemensamt namn för enkelt återanvändning. En funktion kan ta ett antal argument och returnera ett värde (returvärde). def repeat(string, n): """Return the string repeated n times.""" repeated = string * n return repeated 14
Duck typing If it walks like a duck and quacks like a duck, it s probably a duck. Alla objekt i python är av någon specifik typ, men det viktiga är inte exakt vilken typ objektet har, utan vad man kan göra med det. 15
Allmänt om syntaxen Inga explicita variabeldeklarationer variablerna skapas när man tilldelar dem ett värde. Inga variabeltyper (variabler är bara referenser, och kan referera till vad som helst). Inga måsvingar ; block markeras med indentering (och kolon). Om ett block är tomt används pass som platshållare. 16
Strängar "Det här är en sträng " Det här är också en "sträng" """Det här är en "sträng" som kan spänna över flera rader.""" Kan konstrueras med str(). Bakstreck fungerar som escapetecken: "Här finns \"citattecken\" och en\nradbrytning." 17
Numerärer Heltal: 1, 4711, -10 Kan konstrueras med int(). Decimaltal: 3.14,.5, 1., -273.15 Kan konstrueras med float(). 18
Villkorssatser: if if some_condition: pass elif other_condition: pass else: pass elif och else kan utelämnas. 19
Sanningsvärden Rena sanningsvärden är True och False (av typen bool). Alla värden kan dock användas som sanningsvärden. Falska: None, 0, [], (), {} (och vissa egna klasser). Sanna: allt annat. 20
Sanningsvärden: operatorer ==!= likhet/olikhet < > större/mindre än <= >= större/mindre än eller lika med is is not objektidentitet not a a and b a or not b sant om a är falskt; annars falskt a om a är falskt; annars b b om a är falskt; annars a and och or evaluerar sin andra operand endast om det behövs för att avgöra slutresultatet. 21
Sekvenser: sekvenstyper Listor (list) lista = [1, foo, bar, [42, baz ]] Listor är muterbara; man kan förändra deras innehåll. Tuplar (tuple) tupel = (1, foo, bar, (42, baz )) Strängar [sekvenser av tecken] (str) s = "python" (Egna klasser) len() ger längden på en sekvens. 22
Sekvenser: indexåtkomst Elementen i en sekvens kan refereras med hjälp av indexoperatorn []. >>> tokens = [ jag, känner, en, pudel ] >>> tokens[0] jag >>> tokens[1] = är >>> tokens.insert(2, inte ) >>> " ".join(tokens) jag \xe4r inte en pudel Notera escapesekvensen \xe4 för ä. 23
Sekvenser: indexåtkomst (forts) Negativt index räknar från slutet: >>> s = "python" >>> s[-1] n 24
Sekvenser: operatorer + konkatenerar: >>> språk + teknologi spr\xe5kteknologi * upprepar: >>> "hi" * 3 hihihi Existensoperatorn in: >>> 5 in [0,2,4,6,8] False >>> tekno in språkteknologi # substräng True 25
Mappningstyper Effektiv lagring av nyckel värde-par (hashtabell). Lexikon (dict) (eng. dictionary) (Egna klasser) >>> eng = { pudel : poodle, känner : know,... jag : I, en : a } >>> eng[ pudel ] poodle >>> eng[ är ] = am Muterbara typer får inte användas som nycklar. 26
None None är en särskild typ som representerar frånvaron av något värde (men None är ett värde i sig!). Funktioner som inte returnerar något värde returnerar i själva verket None. Observera att None inte är detsamma som t ex null i Java. 27
Iteration: for for element in sequence: print element Att tilldela ett nytt värde till element inom for-blocket påverkar inte sequence! for i in range(10): print i for i in range(len(tokens)): if tokens[i] == "städare": tokens[i] = "hygientekniker" 28
Iteration: while i = 0 while i < 10: print i i += 1 while True: if some_condition:... break # loop forever break avbryter iterationen. continue hoppar direkt till nästa iterationssteg. 29
Funktioner >>> def translate(words, dictionary):... """Translate words according to the given... dictionary."""... translated = []... for word in words:... if word in dictionary:... translated.append(dictionary[word])... else:... translated.append("<%s>" % word)... return translated... 30
Funktioner (forts) >>> sve_eng = { pudel : poodle, känner : know,... jag : I, en : a } >>> translate([ jag, känner, en, liten,... pudel ], sve_eng) [ I, know, a, <liten>, poodle ] 31
Klasser Klasser används för att definiera egna datatyper. >>> class Student:... """Represent a student."""... def init (self, first_name, last_name):... self.first_name = first_name... self.last_name = last_name... def str (self):... return "%s %s" % (self.first_name,... self.last_name)... >>> ego = Student( Filip, Salomonsson ) 32
Klasser (forts) >>> ego = Student( Filip, Salomonsson ) >>> ego < main.student instance at 0xb7f67fcc> >>> ego.first_name Filip >>> ego.age = 25 >>> print ego Filip Salomonsson 33
Rätt Sätt TM Skriv alltid dokumentationssträngar i dina funktioner, klasser och metoder. Kommentera koden lagom mycket. Använd inbyggda funktioner/metoder när de finns. Krångla inte till det! Följ stilguiden: <http://www.python.org/peps/pep-0008.html> 34
När ni behöver hjälp Använd Pythonskalet! Dokumentationen på nätet: <http://www.python.org/doc/2.3.3/> Tutorial Library Reference Fråga en kursare Googla! Fråga Filip 35
Labben Lära känna python Läsa kod Modifiera kod Skriva ny kod (tjoho!) Jobba i par! 36