Osa 3

Behandla strängar

Strängoperationer

Strängar kan kombineras med +-operatorn:

start = "exe"
slut = "mpel"
ord = start+slut
print(ord)
Exempelutskrift

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)
Exempelutskrift

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.

Programmeringsövning

Flera strängar

Poäng:
Loading...

/

Loading...

Skapa ett program som ber användaren ange en sträng samt ett antal. Programmet ska sedan skriva ut strängen så många gången som antalet anger, enligt följande exempel:

Exempelutskrift

Ange sträng: origami Ange antal: 2 origamiorigami

Logga in för att testa

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))
Exempelutskrift

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.

Programmeringsövning

Den längre strängen

Poäng:
Loading...

/

Loading...

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:

Exempelutskrift

Ange sträng 1: nja Ange sträng 2: betongsäck betongsäck är längre

Exempelutskrift

Ange sträng 1: sommartider hej hej Ange sträng 2: sol, vind o vatten sommartider hej hej är längre

Exempelutskrift

Ange sträng 1: glasgolv Ange sträng 2: vildsvin Strängarna är lika långa

Logga in för att testa

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.

3 2 1

Det här programmet…

strang = input("Ange sträng: ")
print(strang[0])
print(strang[1])
print(strang[3])

…skulle skriva ut följande:

Exempelutskrift

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])
Exempelutskrift

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
Exempelutskrift

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].

3 2 2

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])
Exempelutskrift

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])
Exempelutskrift

Ange sträng: introkursen i programmering Tionde tecknet: e

Exempelutskrift

Ange sträng: python

Traceback (most recent call last): File "", line 1, in IndexError: string index out of range

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.

Programmeringsövning

Omvänt

Poäng:
Loading...

/

Loading...

Skapa ett program som ber användaren mata in en sträng. Programmet ska sedan skriva ut tecknen i omvänd ordning på varsin rad.

Exempel:

Exempelutskrift

Ange sträng: geting g n i t e g

Logga in för att testa

Programmeringsövning

Andra och näst sista

Poäng:
Loading...

/

Loading...

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.

Exempelutskrift

Ange ett ord: python Den andra och den nästsista bokstaven skiljer sig från varandra

Exempelutskrift

Ange ett ord: pascal Den andra och den nästsista bokstaven är a

Logga in för att testa

Programmeringsövning

Speciellt streck

Poäng:
Loading...

/

Loading...

Skapa ett program som ritar ut ett streck bestående av så många hashtags (#) som användaren anger.

Exempelutskrift

Bredd: 3

###
Exempelutskrift

Bredd: 8

########

Logga in för att testa

Programmeringsövning

Fyrkant

Poäng:
Loading...

/

Loading...

Utveckla det föregående programmet så att användaren också kan definiera höjden på figuren.

Exempelutskrift

Bredd: 10 Höjd: 3 ########## ########## ##########

Logga in för att testa

Programmeringsövning

Understrykning

Poäng:
Loading...

/

Loading...

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.

Exempelutskrift

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:

Logga in för att testa

Programmeringsövning

Högerjusterat

Poäng:
Loading...

/

Loading...

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.

Exempelutskrift

Ord: python

**************python
Exempelutskrift

Ord: ganskalångsträng

****ganskalångsträng
Exempelutskrift

Ord: sssuperlångstränggg

*sssuperlångstränggg

Logga in för att testa

Programmeringsövning

Ordlåda

Poäng:
Loading...

/

Loading...

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.

Exempelutskrift

Ord: aj!

******************************
*            aj!             *
******************************
Exempelutskrift

Ord: python

******************************
*           python           *
******************************

Logga in för att testa

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:

3 2 3

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:])
Exempelutskrift

gla sbi gla sbil

Programmeringsövning

Delsträngar 1

Poäng:
Loading...

/

Loading...

Skapa ett program som ber användaren mata in en sträng. Därefter ska programmet skriva ut alla delsträngar med start från det första tecknet, i storleksordning.

Exempel:

Exempelutskrift

Ange sträng: test t te tes test

Logga in för att testa

Programmeringsövning

Delsträngar 2

Poäng:
Loading...

/

Loading...

Skapa ett program som ber användaren mata in en sträng. Därefter ska det skriva ut alla delsträngar som slutar med det sista tecknet, i storleksordning.

Exempel:

Exempelutskrift

Ange sträng: test t st est test

Logga in för att testa

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:

Exempelutskrift

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")
Exempelutskrift

Vad söker du efter? eu Hittades Vad söker du efter? euval Hittades inte Vad söker du efter? u-v Hittades ...

Programmeringsövning

Hittas vokaler?

Poäng:
Loading...

/

Loading...

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:

Exempelutskrift

Ange sträng: hej på dig a hittas inte e hittas o hittas inte

Exempelutskrift

Ange sträng: morjens a hittas inte e hittas o hittas

Logga in för att testa

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:

3 2 4

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"))
Exempelutskrift

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")
Exempelutskrift

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 ...

Programmeringsövning

Hitta första delsträngen

Poäng:
Loading...

/

Loading...

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.

Exempelutskrift

Ord: algeriet Tecken: a alg

Exempelutskrift

Ord: insändare Tecken: n nsä

Exempelutskrift

Ord: vindpust Tecken: x

Exempelutskrift

Ord: python Tecken: n

Logga in för att testa

Programmeringsövning

Hitta alla delsträngar

Poäng:
Loading...

/

Loading...

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.

Exempelutskrift

Ord: ljudlös Tecken: l lju lös

Exempelutskrift

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:]
Exempelutskrift

Ord: solgass solgass olgass lgass gass ass ss s

Logga in för att testa

Programmeringsövning

Andra förekomsten

Poäng:
Loading...

/

Loading...

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:

Exempelutskrift

Ange sträng: abcabc Ange delsträng: ab Delsträngens andra förekomst är vid index 3.

Exempelutskrift

Ange sträng: laserpenna Ange delsträng: a Delsträngens andra förekomst är vid index 9.

Exempelutskrift

Ange sträng: dynga Ange delsträng: dy Delsträngen förekommer inte två gånger.

Logga in för att testa

Frågesport:
Loading...
Poäng:
Loading...

Logga in för att se uppgiften

Du har nått slutet av den här delen! Fortsätt till nästa del:

Se dina poäng genom att klicka på cirkeln nere till höger av sidan.