Variabeltypen string används för att lagra och manipulera text och textliknande teckenföljder.
En sträng anges omgiven av "-tecken eller '-tecken:
a="Hej!"
b='Hej!'
Speciella tecken
Tecknet \ ("backslash") är en så kallad
escape character som
används för att skriva tecken som annars skulle vålla problem då de
krockar med hur koden normalt läses av programmet ex:
\" ett "-tecken inuti en sträng omgiven av "-tecken
\' ett '-tecken inuti en sträng omgiven av '-tecken
\n ny rad
\t tabulering
Hur skrivs då \ i en sträng? Jo som \\
Övning 1.23
Använd
det interaktiva skalet och testa följande:
a) print("C:\\kalle\\Python")
b) print("Lars kallas \"Lasse\"")
c) print("Kalle\t200\nLisa\t1200")
Långa rader i koden
Det är rekommenderat att ha radlängder på max 79 tecken i koden för att förenkla för den som ska läsa och klara alla editorer. Därför kan det finnas behov av att dela upp en sats eller en sträng i flera rader.
- För uttryck som inte är strängar och som omges av (), [] eller {} görs radbyte genom ENTER
- För att byta rad i strängar eller uttryck utan omgivande parenteser används \
Övning 1.24
Testa exemplet:
lang_text="Detta är en låg text så jag byter \
rad i koden trots att det är en rad utskriven."
print(lang_text)
print()
print( "Och nu blev den ännu längre: " +
lang_text + " Så den inte får plats på en rad")
Manipulera strängar
Strängar (eng. strings) kan ses som en rad tecken efter varandra. I Python är tecknen numrerade från noll och uppåt till sista tecknet. Positionen för ett tecken kallas
index. Sista tecknet i en sträng har index som är 1 mindre än strängens längd.
Funktionen
len(s) ger längden på en sträng.
För att komma åt delar av en sträng används:
Uttryck |
Beskrivning |
s[i] |
Returnerar tecknet med index i |
s[i:j] |
Returnerar strängen från och med i till (men ej lika med!) j |
s[i:] |
Returnerar strängen från och med i |
s[:i] |
Returnerar strängen till i |
s[-j] |
Motsvarar s[len(s)-j]. Alltså tecknet j från slutet |
s[-j:] |
Returnerar resten av strängen från och med tecknet j från slutet |
s[:-j] |
Returnerar strängen fram till tecknet j från slutet |
Obs! Att använda negativa index som i de tre sista varianterna är en indexering som många språk saknar. Det finns tex. varken i C, C++ eller Java.
Övning 1.25
Skriv och testa nedanstående program.
text="ABCDEFGHIJK"
print(text+"\tLängd="+str(len(text)))
print(text[2])
print(text[len(text)-1])
print(text[2:6])
print(text[2:])
print(text[:6])
print(text[-2])
print(text[-2:])
print(text[:-6])
Concatenering, att lägga ihop strängar
Att lägga strängar efter varandra till en ny längre sträng kallas concatenring (eng. concatenate) och görs med + så som du sett. Det går också att skapa en upprepad sträng med *-tecken.
Övning 1.26
Använd
interaktiva skalet och testa följande:
a)
print("husvagn"[:3]+"lastbåt"[-3:])
b)
print("Ha"*5)
Du kan inte ändra i en sträng
Det går inte att ändra i en sträng, lägga till eller ta bort tecken efter att den skapats. Utan du måste skapa en ny sträng för detta och tilldela den till den ursprungliga. Ex:
Lägga till sträng t först till s
s=t+s
Lägga till sträng t sist till s
s=s+t
Lägga till t vid index j
s=s[:j]+t+ s[j:]
Ta bort en del av s från och med index i till j
s=s[:i]+s[j:]
Uppgift 8
Skriv ett program som testar ovanstående strängmanipulationer. Välj själv lämpliga strängar för
t och
s.
Jämförelse av strängar och några bra strängmetoder
Att jämföra strängar i Python påminner om jämförelser mellan tal. Här följer de mest användbara jämförelserna:
Uttryck |
Beskrivning |
s == t |
Sant om s är exakt lika som t |
s != t |
Sant om något skiljer mellan s och t |
s in t |
Sant om strängen s återfinns någonstans i t |
s not in t |
Sant om strängen s inte återfinns någonstans i t |
Notera: Det är skillnad på stora och små bokstäver när jämförelser sker.
Strängar är lite av både fågel och fisk i Python, och flera andra språk. De fungerar som vanliga variabler men de är också
objekt. (Vi kommer att tala mycket mer om objekt senare i kursen.)
Så som objekt har strängar
metoder som kan användas för att utföra olika åtgärder. För att använda en metod skrivs strängen eller strängvariabeln följt av . och sedan metoden. Ex:
"Hej".lower()
s.lower()
Den övre raden ändrar strängen
"Hej" till
"hej" den nedre gör motsvarande för innehållet i strängen
s.
Följande sträng
metoder är ofta användbara:
metod |
Beskrivning |
lower() |
Returnerar en sträng där alla bokstäver ändrats till gemener |
upper() |
Returnerar en sträng där alla bokstäver ändrats till versaler |
find(t) |
Returnerar första index då strängen t återfinns. Om ingen hittas returneras -1. |
count(t) |
Returnera hur många gånger strängen t återfinns. |
replace(s, t) |
Returnerar en sträng där alla förekomster av av strängen s bytts ut mot strängen t |
strip() |
Returnerar en sträng där eventuella mellanslag först eller sist är borttagna |
zfill(x); |
Returnerar en sträng där nollor fyller ut till vänster om texten tills längden är x. Ex. "23".zfill(4) ger "0023" |
format(a, ka) |
Strängformatering. a och ka är argument som används vid formateringen. |
split(t) |
Skapar en lista av strängar från den ursprungliga strängen. Uppdelade där strängen t förkommer. Mer om detta senare i kursen. |
Överkurs: Detta är endast ett litet urval metoder och varianter på metoder. Läs mer
här.
Övning 1.27
Testa följande program
s="IKEA"
t=s.lower()
print("s är: "+ s+"\nt är: "+t)
Notera att
s behåller sitt värde "IKEA" .
Ändra programmet så att det byter "IKEA" i
s till "ikea" istället för att skapa den nya variabeln
t.
Övning 1.28
Ett program som summerar inskrivna tal och avslutas när man skriver n eller N. Skriv och testa.
sum=0
while True :
try:
s=input("Skriv in ett tal. (n för att sluta) ")
if s == "n" or s == "N": break
sum=sum+float(s)
except ValueError:
print("Felaktig inmatning. Försök igen")
print("Summan blir:" + str(sum))
Övning 1.29
Skriv ett program som returnerar första ordet ur en inskriven text.
Övning 1.30
Skriv ett program som skriver ut en inmatad sträng enligt nedanstående exempel:
Inmatad text:
Hej alla glada
Utskrift:
H
He
Hej
Hej
Hej a
... osv ...
Hej alla glad
Hej alla glada
Notera: Kontrollera så att programmet klarar strängar med ett tecken och att du inte får tomrad först i utskriften.
Övning 1.31
Skriv ett program som byter ut alla förekomster av hon och han till hen i en inmatad text.
Uppgift 1.8
Skriv ett program som skriver ut varje ord i en inmatad sträng på en egen rad.
Strängformatering
Det finns en mängd möjliga formateringar med hjälp av
format-metoden. Vi ska titta på några. Syntaxen för strängformatering visas i följande exempel:
"Här är ett tal {0:0.2f} och här är ett tal {1:0.5e}".format(3454564, 3555564)
Resultatet blir (vilket du kan kontrollera med interaktiva skalet):
Här är ett tal 3454564.00 och här är ett tal 3.55556e+06
Klamrarna {} är platshållare som fylls i med innehållet från parentesen efter
format.
Texten i klamrarna är en kod som talar om hur formateringen ska ske. Se nedanstående bild som visar vad de olika delarna betyder:
Notera: koden ovan är inte fullständig. Det finns
ytterligare positioner som kan användas. Den täcker dock det viktigaste.
- Index i formatlistan: Anger vilken position i parentesen, räknat från noll, som innehållet ska hämtas ur. Kan utelämnas. Om det utelämnas hämtas innehållet i ordningen de står i format-parentesen så att första klamern fylls med första innehållet, andra med andra osv.
- Minimal längd: Anger det minsta antal tecken som innehållet ska ta upp. Om det blir tecken över fylls de med mellanslag. Kan utelämnas.
- Precision: Anger antal decimaler eller värdesiffror för tal. Kan utelämnas.
- Formateringstyp: Ytterligare information om formateringen för tal. Se nedanstående tabell för exempel.
Tecken |
Beskrivning |
b |
För heltal: Binär form |
d |
Heltal: Basen 10 |
f |
Flyttal: Bestämt antal decimaler och utan tiopotens |
g |
Flyttal: Automatiskt byte till grundpotes för stora eller små tal. När g används anger siffran bakom punkten antalet värdesiffror. |
e |
Flyttal: Grundpotensform |
x |
För heltal: Hexadecimal form |
Övning 1.32
Använd
interaktiva skalet och gör följande:
a) Skriv och testa:
"{:6.2f}".format(3.1415)
b) Skriv och testa:
"{:10}{:6d}".format("Invånare", 123)
c) Ta reda på vad 2000 blir hexadecimalt respektive binärt.
d) Skriv och testa:
"{1}={0:0.3g}".format(12.234, "a")
Uppgift 1.9
Skriv ut ett "kvitto" enligt nedanstående. Decimalpunkterna ska hamna under varandra.
Godis 21.40
Kött 121.30
===============
Summa 142.70