Nogle gange har man brug for at kunne ændre i tekstrenge eller finde specielle ting deri. Tag f.eks. denne tekststreng:
hansboedker@dkmail.dk
Tekststreng fortæller os en del ting:
Det kan vi læse, fordi vi hurtigt afkoder tekststrengens bogstaver og tegn. For at Python kan gøre det samme skal vi bruge nogle forskellige funktioner:
len()
count()
find()
replace()
Ved hjælp af slicing kan man opdele tekststrenge i mindre stykker. For at "slice" tekststykket anvender vi følgende syntaks
*tekststreng*[*startposition*:*slutposition*]
Tegnenes position i tekststrengen angives enten fra venstre med positive værdier eller fra Højre med negative. Se tabellen herunder:
h | a | n | s | b | o | e | d | k | e | r | @ | d | k | m | a | i | l | . | d | k |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
-21 | -20 | -19 | -18 | -17 | -16 | -15 | -14 | -13 | -12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
Lad os se på nogle eksempler med mailen fra før: hansboedker@dkmail.dk.
Først slicer vi navnet ud (i konsollen):
"hansboedker@dkmail.dk"[0:11]
'hansboedker'
Her udskriver vi tegnene fra 0 → 11. Læg mærke til at 11 ikke er med.
Da vi skal bruge denne mail mange gange, så laver vi den lige som variabel i stedet for:
>>> mail = "hansboedker@dkmail.dk"
>>> mail[0:11]
'hansboedker'
Vi kunne også have udeladt 0 som startværdi, da Python tolker en manglende værdi som enten fra start eller slutningen af strengen:
>>> mail = "hansboedker@dkmail.dk"
>>> mail[:11]
'hansboedker'
Lad os slice landekoden ud på to måder:
>>> mail[19:]
'dk'
>>> mail[-2:]
'dk'
Vi vælger altså selv om vi vil anvende de enkelte tegns positive eller negative placering. Se disse eksempler hvor domænenavnet bliver slicet ud:
>>> mail[12:18]
'dkmail'
>>> mail[-9:-3]
'dkmail'
>>> mail[-9:18]
'dkmail'
Man kan også slice en slice, altså udskille tegn fra en slicet tekst. Se nedestående eksempel fra Idle, hvor mailadressen først bliver slicet af to omgange:
>>> mail[12:]
'dkmail.dk'
>>> mail[12:][-2:]
'dk'
I første omgang bliver dkmail.dk slicet ud af af selve mailen. I anden omgang bliver der slicet fra position -2 i den nye tekststreng.
Som en lille sjov ting kan man også udskrive en tekststreng omvendt ved hjælp af slicing.
>>> mail[::-1]
'kd.liamkd@rekdeobsnah'
Med samme metode kan du også udskrive hvert andet tegn i tekstrengen:
>>> mail[::2]
'hnbekrdmi.k'
len()
tæller det samlede antal tegn der er i en streng. Her undersøger vi hvor mange tegn der er i mailen.
>>> len(mail)
21
Mellemrum er også tegn:
>>> len("Mellemrum er også tegn")
22
>>> len("Mellemrumerogsåtegn")
19
count()
tæller hvor mange gange noget forekommer i en tekstreng. Her tæller vi antallet af @ og dk
>>> mail.count("@")
1
>>> mail.count("dk")
3
@ står der altså 1 gang og dk 3.
Count kan f.eks. bruges til at sige om det er en gyldig emailadresse, ved at tjekke om der er et @. Se dette program:
mail = input("Indtast mail: ")
if mail.count("@") == 1:
print ("\n\tDer er @ i mailen.")
else:
print ("\n\tDer mangler @ i mailen.")
>>> %Run test.py Indtast mail: andreas@fakemail.dk Der er @ i mailen. >>> %Run test.py Indtast mail: betina_fakemail.dk Der mangler @ i mailen.
find()
bruges til at finde placeringen af en streng. Den anvendes på følgende måde:
>>> mail.find("@")
11
Det kan vi bruge til at lave et program der udskriver brugernavnet i en mail:
mail = input("Indtast mail: ")
mail_a = mail.find("@")
brugernavn = mail[:mail_a]
print(f"Brugernavnet er: {brugernavn}")
>>> %Run test.py Indtast mail: viggo37@fakemail.dk Brugernavnet er: viggo37
replace()
bruges til at erstatte tekststrenge med andre tekststrenge. Funktionen anvendes på følgende måde:
replace([gammel tekst], [ny tekst])
Her vil vi ændre i denne tekstreng: Kurt kommer for sent i skole.. Først vil vi ændre Kurt til Karen og derefter i skole til på arbejde.
>>> sætning = "Kurt kommer for sent i skole"
>>> sætning
'Kurt kommer for sent i skole'
>>> sætning.replace("Kurt","Karen")
'Karen kommer for sent i skole'
>>> sætning.replace("i skole","på arbejde")
'Kurt kommer for sent på arbejde'
>>> sætning
'Kurt kommer for sent i skole'
Læg mærke at replace()
ikke ændrer på variablen, men kun output. Hvis variablen skal ændres, så skal det gøres som herunder.
>>> ny_sætning = sætning.replace("i skole","på arbejde")
>>> ny_sætning
'Kurt kommer for sent på arbejde'
Dette kan bruges meget smart. På mange hjemmesider skal man bruge . (punktum) i stedet for , (komma), når man indtaster tal i udregninger. Her har jeg lavet en funktion der udskifter , til ., hvis brugeren indtaster forkert:
tal = input("Skriv et decimaltal: ")
tal = tal.replace(",",".")
print(tal)
>>> %Run test.py Skriv et decimaltal: 2,5 2.5 >>> %Run test.py Skriv et decimaltal: 2.5 2.5