Strenger
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:
1setning = "Det ligger 5 terninger på bordet."
Oppgave
Beskriv hva som skjer i kommandolinja over.
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?
1setning = "Det ligger 5 terninger på bordet." 2print(setning[0]) 3print(setning[4]) 4print(setning[-1])
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.
1setning = "Det ligger 5 terninger på bordet." 2print(float(setning[11]) 3print(int(setning[11])
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!
1setning = "Det ligger 5 terninger på bordet." 2print((len(setning))
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:
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.
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.
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!
1setning = "Det ligger 5 terninger på bordet." 2print(list(setning))
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.
1setning = "Det ligger 5 terninger på bordet." 2liste = setning.split() 3print(f"Ordene i setningen er {liste}.")
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.
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