Python Datatyper & filhantering Datatyper • • • • • • Heltal - 3 Flyttal - 2,456 Listor - [1,2,3,4] Strängar - ”spam!” Dictionaries - {1:”camelot”,2:”shrubbery”} Tupler - (1,2,3,) 1 Objekt • • • • • I Prolog finns inga objekt, bara värden Ett objekt har attribut Ett objekt har metoder Typer Klasser Anropa metoder & attribut • En metod är en funktion som "lever" i ett objekt • Ett attribut är en egenskap hos ett objekt metod: [1,2,3].append(5) attribut: parrot.life 2 type() >>> a=7 >>> b=2.4 >>> c="hello sailor!" >>> d=[1,1,1,1,1] >>> type(a) <type 'int'> >>> type(b) <type 'float'> >>> type(c) <type 'str'> >>> type(d) <type 'list'> Lite snabbt: dictionaries och tupler • Dictionaries är oordnade nyckel-värde-par • Effektiva, enkla. Mycket vanliga. (kallas hash i perl) ex: spamDict = {1:"spam", 5:"tomato", 2:"eggs", 3:"spam"} print spamDict[5] 'tomato' mer om dictionaries en annan gång 3 Lite snabbt: dictionaries och tupler • Tupler är ordnade sekvenser av objekt • Små, snabba. Väldigt Pythonska spamTuple = (1,2,3) • Skillnad mot listor? Immutable. • Mer om tupler en annan gång Listor • • • • Listor är en ordnad sekvens av objekt Listor är inte en rekursiv datastruktur Listor är mutable (föränderliga) Listor har index 4 Index • Ett ordningstal ex: >>> myLittleList = [1,2,3,4,5] >>> print myLittleList[0] 1 • det första objektet är det "0-te" >>> print myLittleList[1] 2 • funkar bakifrån: >>> 5 print myLittleList[-1] Slice • Är ett ursnitt ur en lista (eller tupel, eller sträng) • Lite ointuitivt. lista[n:m] där n är start och m är slut • OBS! >>> >>> 3 >>> [1, aList = [0,1,2,3] aList[3] aList[1:3] 2] 5 Slice Index 0 1 2 3 4 [ 1, 2, 3, 4, 5 ] Slice 0 1 2 3 4 -5 -4 -3 -2 -1 5 Metoder på listor • • • • • • • • • append(...) L.append(object) -- append object to end count(...) L.count(value) -> integer -- return number of occurrences of value extend(...) L.extend(iterable) -- extend list by appending elements from the iterable index(...) L.index(value, [start, [stop]]) -> integer -- return first index of value insert(...) L.insert(index, object) -- insert object before index pop(...) L.pop([index]) -> item -- remove and return item at index (default last) remove(...) L.remove(value) -- remove first occurrence of value reverse(...) L.reverse() -- reverse *IN PLACE* sort(...) L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*; cmp(x, y) -> -1, 0, 1 6 Listor >>> a=[1,2,3,4] >>> a.append(6) >>> a [1,2,3,4,6] >>> a.append([37]) >>> a [1,2,3,4,6,[37]] >>> b=[4,3,2,1] >>> b.extend([5,6]) >>> b [4,3,2,1,5,6] >>> b.reverse() >>> b [6,5,1,2,3,4] >>> b.sort() >>> b [1,2,3,4,5,6] Strängar • En ordnad sekvens av tecken • Rekursiv struktur; varje tecken i en sträng är också en sträng • Går att skriva på flera sätt, se lab 1. 7 Index & slice • Strängar har också index och slice >>> aString = "My brain hurts!" >>> aString[3] 'b' >>> aString[3:8] 'brain' Men… Listor Strängar >>> >>> 3 >>> >>> [1, >>> aString = "Hostile" >>> aString[3] 't' >>> aString[3] = "q" Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'str' object does not support item assignment aList = [1,2,3] aList[2] aList[2] = 8 aList 2, 8] 8 Strängar • Strängar är alltså immutable • Hur gör man då? def removeT(inString): result = "" for char in inString: if char != "t": result = result + char return result print removeT("loretta and stan") "lorea and san" Filhantering För att skapa ett filobjekt: file(pathToFile, mode [,buffering]) mode är "r" (read), "w" (write) eller "a" (append) ([, buffering] betyder ev. arg.) Exampel: inFile = file("/Users/petern/bad_novel.txt", "r") . . inFile.close() 9 Filhantering • close() -> None or (perhaps) an integer. Close the file. • read([size]) -> read at most size bytes, returned as a string. • readline([size]) -> next line from the file, as a string. • readlines([size]) -> list of strings, each a line from the file. • write(str) -> None. Write string str to file. • writelines(sequence_of_strings) -> None. Write the strings to the file. Exempel: kopiera fil inFile=file("input.txt", "r") #read outFile=file("output.txt", "w") #write fileContent=inFile.read() #all file as one string outFile.write(fileContent) #write string inFile.close() #close first file... outFile.close() #...and the other 10