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 \
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ängmetoder ä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
Inga kommentarer:
Skicka en kommentar