Behandla strängar
Strängoperationer
Strängar kan kombineras med +
-operatorn:
start = "exe"
slut = "mpel"
ord = start+slut
print(ord)
exempel
Operatorn *
kan också användas med strängar då den andra operanden är ett heltal. Strängoperanden kommer då att upprepas det antal gånger som specificeras av heltalet. Till exempel så här:
ord = "pegas"
print(ord*3)
pegaspegaspegas
Genom att kombinera strängoperationer med en loop kan vi skriva ett program som ritar en pyramid:
n = 10 # våningar i pyramiden
rad = "*"
while n > 0:
print(" " * n + rad)
rad += "**"
n -= 1
Så här ser utskriften ut:
*
***
*****
*******
*********
***********
*************
***************
*****************
*******************
Instruktionen print
inom loopen skriver ut en rad som börjar med n
mellanslag följt av värdet som är lagrat i variabeln rad
. Sedan läggs två stjärnor till i slutet av variabeln rad
och variabeln n
:s värde minskas med ett.
Längden på en sträng och dess index
Funktionen len
returnerar antalet tecken i en sträng som ett heltal. Till exempel returnerar len("hej")
3 eftersom det finns tre tecken i strängen hej
.
Följande program ber användaren att mata in en sträng och skriver sedan ut det "understrykt". Programmet skriver alltså ut en andra rad som innehåller så många streck (-
) som det finns tecken i den givna strängen:
strang = input("Ange sträng: ")
print(strang)
print("-"*len(strang))
Ange sträng: Hejsan svejsan!
Hejsan svejsan! ---------------
Strängens längd innehåller alla tecken i strängen – också mellanslag. Till exempel är längden på strängen hej igen
8.
Den längre strängen
/
Skapa ett program som ber användaren mata in två strängar. Programmet ska skriva ut den längre strängen. Om båda är lika långa skrivs meddelandet "Strängarna är lika långa" ut.
Exempel:
Ange sträng 1: nja Ange sträng 2: betongsäck betongsäck är längre
Ange sträng 1: sommartider hej hej Ange sträng 2: sol, vind o vatten sommartider hej hej är längre
Ange sträng 1: glasgolv Ange sträng 2: vildsvin Strängarna är lika långa
Eftersom strängar i grunden är sekvenser av tecken kan vi också plocka ut enskilda tecken ur en sträng. Vi gör det med hjälp av operatorn []
och ett index.
Indexet hänvisar till en given position i strängen, och indexeringen börjar från 0. Det första tecknet i en sträng har alltså indexet 0, medan nästa tecken har indexet 1 och så vidare.

Det här programmet…
strang = input("Ange sträng: ")
print(strang[0])
print(strang[1])
print(strang[3])
…skulle skriva ut följande:
Ange sträng: pegas p e a
Eftersom det första tecknet i en sträng har indexet noll, har det sista tecknet indexet längd-1. Följande program skriver ut det första och sista tecknet i en sträng:
strang = input("Ange sträng: ")
print("Första: " + strang[0])
print("Sista: " + strang[len(strang) - 1])
Ange sträng: test! Första: t Sista: !
Det här programmet går igenom varje tecken i en sträng – från det första till det sista:
strang = input("Ange sträng: ")
plats = 0
while plats < len(strang):
print(strang[plats])
plats += 1
Ange sträng: test t e s t
Man kan också använda negativa index för att komma åt tecknen i en sträng i motsatt ordning, dvs. från slutet av strängen.
Det sista tecknet i en sträng har då indexet -1, det näst sista indexet -2 och så vidare. Du kan tänka att str[-1]
är en genväg för str[len(str) – 1]
.

Det föregående exemplet kan därmed förenklas med negativ indexering.
strang = input("Ange sträng: ")
print("Första: " + strang[0])
print("Sista: " + strang[-1])
Ange sträng: test! Första: t Sista: !
IndexError: string index out of range
Om du har testat exemplen ovan har du kanske stött på felmeddelandet IndexError
. Det här felet uppstår då du försöker använda ett index som inte finns i en sträng.
strang = input("Ange sträng: ")
print("Tionde tecknet: " + strang[9])
Ange sträng: introkursen i programmering Tionde tecknet: e
Ange sträng: python
Ibland orsakas indexeringsfel av en bugg i koden. Det är till exempel relativt vanligt att man försöker komma åt ett index som inte finns när man försöker komma åt det sista tecknet i en sträng:
strang = input("Ange sträng: ")
print("Sista tecknet: " + strang[len(strang)])
Eftersom strängindexeringen börjar med noll kommer det sista tecknet att ha indexet len(str) - 1
.
Det finns situationer där programmet borde förbereda sig för fel orsakade av indata från användaren:
strang = input("Ange sträng: ")
if len(strang) > 0:
print("Första tecknet: " + strang[0])
else:
print("Strängen är tom, alltså finns det inget första tecken")
I exemplet ovan skulle en sträng med längden noll ha orsakat problem om programmeraren inte skulle ha lagt till en längdkontroll i koden. En sträng med längden noll är en tom sträng. En inmatning blir en tom sträng om användaren inte skriver in något utan direkt trycker Enter.
Andra och näst sista
/
Skapa ett program som ber användaren mata in ett ord. Programmet ska därefter berätta om ordets andra och nästsista bokstäver är de samma.
Ange ett ord: python Den andra och den nästsista bokstaven skiljer sig från varandra
Ange ett ord: pascal Den andra och den nästsista bokstaven är a
Understrykning
/
Skapa ett program som ber användaren mata in strängar. Programmet skriver sedan ut strängarna med understrykning enligt exemplet. Programmet avslutas då användaren ger en tom sträng, dvs. en sträng med längden noll.
Ange sträng: Hejsan svejsan!
Hejsan svejsan! ---------------
Ange sträng: Clara steg upp på en tremetersstege
Clara steg upp på en tremetersstege -----------------------------------
Ange sträng: a
a -
Ange sträng:
Högerjusterat
/
Skapa ett program som ber användaren mata in en sträng. Programmet ska sedan skriva ut strängen så att utskriften är exakt 20 tecken lång. Om strängen är kortare ska det finnas ett passligt antal asterisker (*
) i början av strängen.
Du kan anta att strängen består av högst 20 tecken.
Ord: python
**************python
Ord: ganskalångsträng
****ganskalångsträng
Ord: sssuperlångstränggg
*sssuperlångstränggg
Ordlåda
/
Skapa ett program som ber användaren mata in ett ord. Programmet ska sedan skriva ut ordet i mitten av en ram som består av asterisker. Bredden av ramen är 30 tecken. Du kan anta att ordet som anges ryms i ramen.
Om ordets längd är udda, kan du skriva ut det så att det ligger i mitten.
Ord: aj!
****************************** * aj! * ******************************
Ord: python
****************************** * python * ******************************
Delsträngar
En delsträng är en sekvens av tecken som utgör en del av den ursprungliga strängen. Till exempel innehåller strängen exempel
delsträngarna exem
, mpe
, el
med flera. Att i Python ta ut en delsträng ur en sträng kallas för slicing.
Om du vet vad det inledande och avslutande indexet för en delsträng är, kan du extrahera (slice) delsträngen med notationen [a:b]
. Då kommer delsträngen att börja vid index a
och ta slut vid det sista tecknet före indexet b
– det vill säga inklusive den första bokstaven men exklusive den sista. Du kan tänka att indexen är streck ritade på den vänstra sidan av det indexerade tecknet – som vi illustrerar nedan:

Låt oss kika lite mer på extraherade (sliced) strängar:
strang = "glassbil"
print(strang[0:3])
print(strang[4:7])
# om inledande index fattas, är det 0
print(strang[:3])
# om avslutande index fattas, är det lika med strängens längd
print(strang[4:])
gla sbi gla sbil
Söka efter delsträngar
Operatorn in
berättar om en sträng innehåller en specifik delsträng. Boolean-uttrycket a in b
är sant om b
innehåller delsträngen a
.
Till exempel skriver den här kodsnutten…
strang = "test"
print("t" in strang)
print("x" in strang)
print("est" in strang)
print("ets" in strang)
… ut följande:
True False True False
Programmet nedan låter användaren söka efter delsträngar i en sträng som är hårdkodad i programmet:
strang = "eu-val"
while True:
delstrang = input("Vad söker du efter? ")
if delstrang in strang:
print("Hittades")
else:
print("Hittades inte")
Vad söker du efter? eu Hittades Vad söker du efter? euval Hittades inte Vad söker du efter? u-v Hittades ...
Hittas vokaler?
/
Skapa ett program som ber användaren mata in en sträng. Programmet ska därefter meddela om vokalerna a, e eller o hittas i strängen.
Du kan anta att strängen är angiven i gemener.
Exempel:
Ange sträng: hej på dig a hittas inte e hittas o hittas inte
Ange sträng: morjens a hittas inte e hittas o hittas
Operatorn in
returnerar ett Boolean-värde. Det berättar alltså bara att en delsträng existerar i en sträng, men baserat på den informationen vet vi inte var delsträngen befinner sig. Däremot kan metoden find
hos strängar användas för det här syftet. Som argument ger man delsträngen som söks efter. Tillbaka får vi ett värde som anger det första indexet där delsträngen hittades – eller -1
om delsträngen inte hittas i strängen.
Så här fungerar det:

Några exempel där vi använder find
:
strang = "test"
print(strang.find("t"))
print(strang.find("x"))
print(strang.find("est"))
print(strang.find("ets"))
0 -1 1 -1
Ovanstående delsträngsexempel gjort med find
:
strang = "led-lampa"
while True:
delstrang = input("Vad söker du efter? ")
plats = strang.find(delstrang)
if plats >= 0:
print(f"Hittades på platsen {plats}")
else:
print("Hittades inte")
Vad söker du efter? ed Hittades på platsen 1 Vad söker du efter? abc Hittades inte Vad söker du efter? ampa Hittades på platsen 5 ...
Hitta första delsträngen
/
Skapa ett program som ber användaren mata in en sträng samt ett tecken. Programmet ska skriva ut den första delsträngen på tre tecken som börjar med det tecknet användaren angett. Du kan anta att strängen består av minst tre tecken.
Ord: algeriet Tecken: a alg
Ord: insändare Tecken: n nsä
Ord: vindpust Tecken: x
Ord: python Tecken: n
Hitta alla delsträngar
/
Utveckla ditt föregående program, så att programmet skriver ut varje delsträng på tre tecken och som börjar med det angivna tecknet. Du kan anta att den inmatade strängen består av minst tre tecken.
Ord: ljudlös Tecken: l lju lös
Ord: nemi Tecken: n nem
Tips: Följande exempel kan ge dig inspiration för uppgiften.
ord = input("Ord: ")
while True:
if len(ord) == 0:
break
print(ord)
ord = ord[2:]
Ord: solgass solgass olgass lgass gass ass ss s
Andra förekomsten
/
Skapa ett program som söker efter den andra förekomsten av en given delsträng i en sträng. Om delsträngen inte hittas två gånger eller ens en gång, ska programmet meddela om detta.
I den här kontexten kan delsträngar inte vara överlappande. I strängen aaaa
hittas delsträngen aa
för den andra gången vid index 2.
Exempel:
Ange sträng: abcabc Ange delsträng: ab Delsträngens andra förekomst är vid index 3.
Ange sträng: laserpenna Ange delsträng: a Delsträngens andra förekomst är vid index 9.
Ange sträng: dynga Ange delsträng: dy Delsträngen förekommer inte två gånger.
Logga in för att se uppgiften
Se dina poäng genom att klicka på cirkeln nere till höger av sidan.