Hösten 2009
Dagens lektion Text som arbetsredskap Funktioner på text i Python Formatera text Läsa från tangentbordet Strängindexerade fält 2
Text som arbetsredskap 3
TEXT SOM ARBETSREDSKAP Textens roll i programmering Text vanliga i vardagsprogrammering Tolka och hantera filer från program Formatera text som används av program Text ofta svårt men finns bra stöd Svårt att hantera alla fall och fel Problem med olika teckentabeller 4
TEXT SOM ARBETSREDSKAP Redskap när vi arbetar med text Ta ut delsträngar Dela upp strängar i olika beståndsdelar Söka speciella ord eller mönster i strängar Ersätta delar av en sträng med nya ord eller tecken Formatering av text (siffror, tal, tabeller) 5
Funktioner på text i Python 6
FUNKTIONER PÅ TEXT I PYTHON Delsträngar Första tecknet i en sträng har index 0(!) >>> s = Lite text att arbeta med >>> s[0:6] Lite t >>> print s[:6] Lite t >>> print s[5:9] text 7
FUNKTIONER PÅ TEXT I PYTHON Dela upp och sätta ihop strängar >>> s = Lite text att arbeta med >>> ord = s.split( ) >>> ord [ Lite, text, att, arbeta, med ] >>> print ord[3] arbeta >>> print -.join(ord) Lite-text-att-arbeta-med 8
FUNKTIONER PÅ TEXT I PYTHON Söka i en sträng >>> s = Lite text att arbeta med >>> s.find( text ) 5 >>> s.find( text, 6) -1 >>> s.count( a ) 3 >>> s.count( a ) 2 9
FUNKTIONER PÅ TEXT I PYTHON Ersätta text i en sträng >>> s = Lite text att arbeta med >>> print s.replace( arbeta med, byta ut ) Lite text att byta ut >>> s = aaaaaa >>> s.replace( a, b ) bbbbbb >>> s.replace( a, b,2) bbaaaa 10
FUNKTIONER PÅ TEXT I PYTHON Fler funktioner på strängar s.capitalize() s.isalnum() s.isdigit() s.isspace() s.lower() s.strip([chars]) s.endswidth(u[,st[,e]]) s.isalpha() s.islower() s.isupper() s.startswith() s.upper() 11
Formatera text 12
FORMATERA TEXT Why all the fuss? Finns behov av att på ett smidigt sätt formatera text Utseende av flyttal (t.ex antal decimaler) Möjlighet att skriva ut text och tal i tabeller plats värde 1 23.0 5 1.6 10-2.7 23 6.0 13
FORMATERA TEXT Använda print till formatering Har många sätt att formatera Formateringskoder i strängen och värden som argument Lite ovant sätt att skriva >>> import math >>> print "Normalt antal decimaler: %f" % math.pi Normalt antal decimaler: 3.141593 >>> print "Med tre decimaler: %.3f" % pi Med tre decimaler: 3.142 14
FORMATERA TEXT Formatera strängar %s %s Skriver ut strängen %ns Strängen upptar totalt n tecken med inledande blanksteg %-ns Strängen upptar totalt n tecken med efterföljande blanksteg # adress.py print "namn: %17s" % "" print "telefon: %17s" % "090 786 7707" > python adress.py namn: telefon: 090 786 7707 15
FORMATERA TEXT Formatera heltal %i %i Skriver ut ett heltal %0ni Skriver ut totalt n tecken med inledande nollor %+ni Skriver även ut ett inledande plusstecken före positiva tal %+0ni Kombination av ovan 16
FORMATERA TEXT Formatera decimaltal %f %f Skriver ut ett decimaltal (flyttal) %.nf Skriver ut n decimaltecken %nf Skriver ut totalt n tecken med inledande blanksteg %+nf Skriver ut totalt n tecken med ett plusstecken före positiva tal 17
FORMATERA TEXT Mer om formatering Behöver inte användas tillsammans med print >>> string = %.2f % math.pi Flera värden kan skrivas ut samtidigt med hjälp av en tupel >>> print %3i%5.2f% % (3, 23.561) 18
Läsa från tangentbordet 19
LÄSA FRÅN TANGENTBORDET Läsa in vad användaren skriver I små program som körs via kommandotolken kan det vara praktiskt att användaren får ge input till programmet. Programmet kan fråga efter information och användaren får svara Funktionen raw_input() väntar tills användaren skrivit något och tryckt på return. Resultatet returneras som en sträng. Kan ta en sträng som argument. Denna skrivs ut innan programmet väntar på användaren. 20
LÄSA FRÅN TANGENTBORDET Exempel m = float(raw_input( Ange antal meter: )) aln = m/0.593808 print %.3f m är detsamma som %.3f aln % (m, aln) 21
Strängindexerade fält 22
STRÄNGINDEXERADE FÄLT Strängindexerade fält I en lista använder man index för att komma åt ett värde Vi vill hålla reda på namn, ålder och adress för en person Många fall mer praktiskt med namngivna index Strängindexerade fält Definieras av par - nyckel och värde Nyckeln är en sträng Värdet kan vara av vilken datatyp som helst Nyckeln används för att hämta värdet. 23
STRÄNGINDEXERADE FÄLT Exempel person1 = { namn : Kalle, alder :23, adress : Krokiga stigen 41\n955 73 Dungen } person2 = { namn : Frida, alder :26, adress : Tallkojan 1\n955 41 Storskogen } personer = [person1, person2] for person in personer: print %s\n%s\n % ( person[ namn ], person[ adress ]) 24
STRÄNGINDEXERADE FÄLT Formattera strängindexerade fält Vi kan i formateringssträngen ange namn på fält i strängindexerade fält. for person in personer: print %(namn)s\n%(adress)s\n % person 25
STRÄNGINDEXERADE FÄLT Kolla om en nyckel finns if namn in person1: print person1[ namn ] else: print Inget namn tillgängligt Alternativt if person1.has_key( namn ): print person1[ namn ] else: print Inget namn tillgängligt 26