Hopp til innhald
Verktøy og mal

Strengar

Som oftast vil vi jobbe med tal når vi programmerer i matematikk, men ein viktig datatype i programmering er tekststrengar.

Ein streng er først og fremst ein sekvens av enkeltteikn, og strengen blir tolka som tekst sjølv om han består av berre tal. I Python er det mange innebygde funksjonar og metodar som kan brukast på strengar. I denne artikkelen skal vi konsentrere oss om ulike måtar å søkje gjennom strengar på. Mens du les, er det lurt om du heile tida prøver å skrive kodane i din eigen editor og køyrer programma så du ser kva du får ut.

Vi må hugse på at Python til liks med all anna programvare ikkje kan forstå innhald før vi tilordnar noko ei meining. Med det meiner vi at til dømes setninga "Det ligg 5 terningar på bordet" ikkje har noka ibuande betydning for programmet anna enn at det er ei lang rekkje med teikn. Til dømes er 5-talet i setninga ikkje mengda 5 for programmet, men berre eit teikn. Vi skal bruke denne setninga for å illustrere ein del av metodane og funksjonane vi kan bruke på strengar, som kan vere nyttige i matematikken.

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

Python
1setning = "Det ligg 5 terningar på bordet."

Oppgåve

Beskriv kva som skjer i kommandolinja over.

Løysing

Variabelen "setning" blir sett lik tekststrengen "Det ligg 5 terningar på bordet.".

Å hente ut enkeltteikn frå tekststrengar

Vi kan hente ut bestemde teikn frå tekststrengen vår ved å bruke indeks, det vil seie at vi hentar ut det første teiknet ved å skrive setning[0]. Teikn nummer 4, setning[3], er eit mellomrom – det er viktig å hugse på at òg mellomromma er teikn. Hugs òg at du kan telje deg bakover: Vil du finne det siste teiknet i ein streng, bruker du indeksen –1.

Oppgåve

Kva blir skrive ut dersom du køyrer koden under?

Python
1setning = "Det ligg 5 terningar på bordet."
2print(setning[0])
3print(setning[4])
4print(setning[-1])
Løysing

D
l
.

Gjere om til tal

Legg merke til at setning[9] er det same som "5", altså eit teikn og ikkje talet 5. Dette skjer ikkje berre med tal som er skrive inn som ein del av ein tekststreng, men òg med tal som er gitt som input av ein brukar. Som vi har vist tidlegare, må vi fortelje datamaskina at dette er eit tal dersom vi skal rekne vidare med det. Du er kanskje vand til å bruke float(). Vi kan òg bruke kommandoen int(). Int står for integer, som er det engelske ordet for heiltal. Prøv koden under, og sjekk kva som er skilnaden.

Python
1setning = "Det ligg 5 terningar på bordet."
2print(float(setning[9])
3print(int(setning[9])

Telje talet på teikn

Vi kan finne ut kor mange teikn det er i strengen vår, ved hjelp av kommandoen len(setning). Dette kan vere nyttig til dømes dersom ein skal køyre ei lykkje som skal sjekke gjennom alle teikna. Her er det viktig å hugse på at eit mellomrom òg er eit teikn. Setninga vår har 31 teikn. Det kan vi finne ut dersom vi skriv print(len(setning)). Prøv!

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

in / not in

Nokre gonger er det nyttig for oss å kunne sjekke om ein tekststreng (eller ein annan datatype som lister) inneheld bestemde element. Då bruker vi anten in eller not in. Vi kan til dømes sjekke om gitte bokstavar finst i setninga vår:

Python
1setning = "Det ligg 5 terningar på bordet."
2
3if "i" in setning:
4  print("bokstaven i er i setninga vår")
5
6if "x" not in setning:
7  print("bokstaven x er ikkje i setninga vår")

Vi kan bruke in og not in for å telje kor mange det er av dei ulike bokstavane i setninga. Det kan vi gjere ved først å plukke ut bokstavane i setninga, for så å gå gjennom setninga ein gong til og telje kor mange vi har av kvar.

Python
1setning = "Det ligg 5 terningar på bordet."
2
3bokstavar = []    #lagar ei tom liste til å leggje bokstavane i
4
5for i in range (len(setning)):
6    if setning[i] not in bokstavar:
7        bokstavar.append(setning[i])    
8#Lykkja går gjennom setninga og plasserer alle bokstavane i lista. 
9#Legg merke til at D og d er ulike teikn! 
10        
11teljing =  [0]*len(bokstavar)    #lagar ei liste med like mange plassar som bokstavar
12
13for i in range (len(bokstavar)):
14    for t in range (len(setning)):
15        if setning[t] == bokstavar[i]:
16            teljing[i]= teljing[i]+1
17#Lykkja går gjennom setninga for å sjekke kor mange det er av kvart 
18#av teikna vi har funne i "bokstavar".
19
20print(bokstavar)
21print(teljing)      
22#Her kan ein jobbe med å få finare utskrift viss ein vil, 
23#til dømes å få skrive ut mengda knytt til kvar bokstav. 

Gjere tekststreng om til liste

Av og til kan det vere formålstenleg å gjere om ein tekststreng til ei liste. Dette gjer vi ved hjelp av kommandoen list(setning). Dersom vi lagar ei liste av setninga vår, får vi ei liste med 31 element, alle saman er teikn. Køyr programmet under, og sjå korleis resultatet blir!

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

split()

Over har vi laga ei liste av alle elementa i tekststrengen "Det ligg 5 terningar på bordet", men vi ser jo at dette er 6 ulike ord. Det kan vere nyttig å få ei liste der kvart ord har sin eigen plass i lista.

Metoden "split" deler opp tekststrengen ved mellomromma og legg då kvart ord som eit element i ei liste. Prøv koden nedanfor, og forklar kva som skjer på linjene.

python
1setning = "Det ligg 5 terningar på bordet."
2liste = setning.split()
3print(f"Orda i setninga er {liste}.")
Forklaring

Linje 1 definerer setninga.

Linje 2 deler opp tekststrengen ved mellomromma og legg kvart ord som eit element i lista "liste".

Linje 3 skriv ut lista med dei ulike orda. Legg merke til at punktumet blir ein del av det siste ordet.

Nokre gonger får vi input i programmet vårt der elementa er skilde av andre teikn enn mellomrom. Vi kan bruke split-kommandoen her òg, vi må berre hugse på å fortelje programmet kva teikn som skil dei ulike elementa ved å skrive det inn i parentesen til kommandoen. Dersom skiljeteiknet vårt er eit komma, får vi kommandoen split(","). Legg merke til at vi må ha hermeteikn rundt kommaet.

I programmet nedanfor skal vi hente inn ei rekkje med tal frå brukaren. Køyr programmet, og forklar kva som skjer.


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

I linje 1 blir brukaren av programmet bedd om å skrive inn tala med eit vanleg komma mellom kvart tal. Dette blir lagt i tekstvariabelen "tekstinput".

I linje 2 kallar vi metoden "split" ved å skrive namnet på tekststrengen, eit punktum og metodenamnet "split". Argumentet til split-metoden er eit komma (,), sidan vi ønskjer at tekststrengen blir delt opp etter dette teiknet. Resultatet blir lagt i listevariabelen "liste".

I linje 3 lagar vi ei tom liste "talliste" for alle tala.

I linje 4 og 5 går vi gjennom lista "liste", gjer om kvart element til eit tal og legg dette til i lista "talliste". (Hugs at dette er heilt naudsynt dersom du skal jobbe vidare med elementa i lista som tal.)

I linje 6 blir lista "talliste" skriven ut (saman med litt forklarande tekst).