Njuike sisdollui
Reaiddut ja málle

Strenger

Som oftest vil vi jobbe med tall når vi programmerer i matematikk, men en viktig datatype i programmering er tekststrenger.

En streng er først og fremst en sekvens av enkelttegn, og strengen tolkes som tekst selv om den består av bare tall. I Python er det mange innebygde funksjoner og metoder som kan brukes på strenger. I denne artikkelen skal vi konsentrere oss om ulike måter å søke gjennom strenger på. Mens du leser, er det lurt om du hele tida prøver å skrive kodene i din egen editor og kjører programmene så du ser hva du får ut.

Vi må huske på at Python i likhet med all annen programvare ikke kan forstå innhold før vi tilordner noe en mening. Med det mener vi at for eksempel setningen "Det ligger 5 terninger på bordet" ikke har noen iboende betydning for programmet annet enn at det er en lang rekke med tegn. For eksempel er 5-tallet i setningen ikke mengden 5 for programmet, men kun et tegn. Vi skal bruke denne setningen for å illustrere en del av metodene og funksjonene vi kan bruke på strenger, som kan være nyttige i matematikken.

Når vi skal skrive inn tekst i Python, bruker vi tegnet " på begge sider, slik:

Python
1setning = "Det ligger 5 terninger på bordet."

Oppgave

Beskriv hva som skjer i kommandolinja over.

Løsning

Variabelen "setning" blir satt lik tekststrengen "Det ligger 5 terninger på bordet".

Å hente ut enkelttegn fra tekststrenger

Vi kan hente ut bestemte tegn fra tekststrengen vår ved å bruke indeks, det vil si at vi henter ut det første tegnet ved å skrive setning[0]. Tegn nummer 4, setning[3], er et mellomrom – det er viktig å huske på at også mellomrommene er tegn. Husk også at du kan telle deg bakover: Vil du finne det siste tegnet i en streng, bruker du indeksen –1.

Oppgave

Hva blir skrevet ut hvis du kjører koden under?

Python
1setning = "Det ligger 5 terninger på bordet."
2print(setning[0])
3print(setning[4])
4print(setning[-1])
Løsning

D
l
.

Gjøre om til tall

Legg merke til at setning[11] er det samme som "5", altså et tegn og ikke tallet 5. Dette skjer ikke bare med tall som er skrevet inn som en del av en tekststreng, men også med tall som er gitt som input av en bruker. Som vi har vist tidligere, må vi fortelle datamaskinen at dette er et tall hvis vi skal regne videre med det. Du er kanskje vant til å bruke float(). Vi kan også bruke kommandoen int(). Int står for integer, som er det engelske ordet for heltall. Prøv koden under, og sjekk hva som er forskjellen.

Python
1setning = "Det ligger 5 terninger på bordet."
2print(float(setning[11])
3print(int(setning[11])

Telle antall tegn

Vi kan finne ut hvor mange tegn det er i strengen vår, ved hjelp av kommandoen len(setning). Dette kan være nyttig for eksempel hvis man skal kjøre en løkke som skal sjekke gjennom alle tegnene. Her er det viktig å huske på at et mellomrom også er et tegn. Vår setning har 33 tegn. Det kan vi finne ut hvis vi skriver print(len(setning)). Prøv!

Python
1setning = "Det ligger 5 terninger på bordet."
2print((len(setning))

in / not in

Noen ganger er det nyttig for oss å kunne sjekke om en tekststreng (eller en annen datatype som lister) inneholder bestemte element. Da bruker vi enten in eller not in. Vi kan for eksempel sjekke om gitte bokstaver finnes i setningen vår:

Python
1setning = "Det ligger 5 terninger på bordet."
2
3if "i" in setning:
4  print("bokstaven i er i setningen vår")
5
6if "x" not in setning:
7  print("bokstaven x er ikke i setningen vår")

Vi kan bruke in og not in for å telle hvor mange det er av de ulike bokstavene i setningen. Det kan vi gjøre ved først å plukke ut bokstavene i setningen, for så å gå gjennom setningen en gang til og telle hvor mange vi har av hver.

Python
1setning = "Det ligger 5 terninger på bordet."
2
3bokstaver = []    #lager ei tom liste til å legge bokstavene i
4
5for i in range (len(setning)):
6    if setning[i] not in bokstaver:
7        bokstaver.append(setning[i])    
8#Løkka går gjennom setningen og plasserer alle bokstavene i lista. 
9#Legg merke til at D og d er ulike tegn! 
10        
11telling =  [0]*len(bokstaver)    #lager ei liste med like mange plasser som bokstaver
12
13for i in range (len(bokstaver)):
14    for t in range (len(setning)):
15        if setning[t] == bokstaver[i]:
16            telling[i]= telling[i]+1
17#Løkka går gjennom setningen for å sjekke hvor mange det er av hvert 
18#av tegnene vi har funnet i "bokstaver".
19
20print(bokstaver)
21print(telling)      
22#Her kan man jobbe med å få finere utskrift hvis man vil, 
23#for eksempel å få skrevet ut antallet knyttet til hver bokstav. 

Gjøre tekststreng om til liste

Av og til kan det være hensiktsmessig å gjøre om en tekststreng til ei liste. Dette gjør vi ved hjelp av kommandoen list(setning). Hvis vi lager ei liste av setningen vår, får vi ei liste med 33 elementer, alle sammen er tegn. Kjør programmet under, og se hvordan resultatet blir!

Python
1setning = "Det ligger 5 terninger på bordet."
2print(list(setning))

split()

Over har vi lagd ei liste av alle elementene i tekststrengen "Det ligger 5 terninger på bordet", men vi ser jo at dette er 6 ulike ord. Det kan være nyttig å få ei liste der hvert ord har sin egen plass i lista.

Metoden "split" deler opp tekststrengen ved mellomrommene og legger da hvert ord som et element i ei liste. Prøv koden nedenfor, og forklar hva som skjer på linjene.

python
1setning = "Det ligger 5 terninger på bordet."
2liste = setning.split()
3print(f"Ordene i setningen er {liste}.")
Forklaring

Linje 1 definerer setningen.

Linje 2 deler opp tekststrengen ved mellomrommene og legger hvert ord som et element i lista "liste".

Linje 3 skriver ut lista med de ulike ordene. Legg merke til at punktumet blir en del av det siste ordet.

Noen ganger får vi input i programmet vårt hvor elementene er skilt av andre tegn enn mellomrom. Vi kan bruke split-kommandoen her også, vi må bare huske på å fortelle programmet hvilket tegn som skiller de ulike elementene ved å skrive det inn i parentesen til kommandoen. Dersom skilletegnet vårt er et komma, får vi kommandoen split(","). Legg merke til at vi må ha anførselstegn rundt kommaet.

I programmet nedenfor skal vi hente inn en rekke med tall fra brukeren. Kjør programmet, og forklar hva som skjer.


python
1tekstinput = input("Skriv inn tallene med komma mellom hvert tall: ")
2liste = tekstinput.split(",")
3talliste = []
4for i in range(len(liste)):
5    talliste.append(float(liste[i]))
6print(f"Lista med tall er {talliste}.")
7
Forklaring

I linje 1 blir brukeren av programmet bedt om å skrive inn tallene med et vanlig komma mellom hvert tall. Dette blir lagt i tekstvariabelen "tekstinput".

I linje 2 kaller vi metoden "split" ved å skrive navnet på tekststrengen, et punktum og metodenavnet "split". Argumentet til split-metoden er et komma (,), siden vi ønsker at tekststrengen blir delt opp etter dette tegnet. Resultatet blir lagt i listevariabelen "liste".

I linje 3 lager vi ei tom liste "talliste" for alle tallene.

I linje 4 og 5 går vi gjennom lista "liste", gjør om hvert element til et tall og legger dette til i lista "talliste". (Husk at dette er helt nødvendig hvis du skal jobbe videre med elementene i lista som tall.)

I linje 6 blir lista "talliste" skrevet ut (sammen med litt forklarende tekst).