Ved hjælp af slicing kan man opdele tekststrenge i mindre stykker. For at "slice" tekststykket anvender vi følgende syntaks
*tekststreng* [*startposition*:*slutposition*]
Hvis man ikke angiver start- eller slutpositionen, så sættes den automatisk til første og sidste tegn .Lad os prøve med at slice i en simpel mail: hansboedker@dkmail.dk.
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 |
Først slicer vi navnet ud (i konsollen):
>>> mail = "hansboedker@dkmail.dk"
>>> mail[:11]
'hansboedker'
Her udskriver vi tegnene fra 0 → 11. Læg mærke til at 11 ikke er med. Nu slicer vi 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'
Som en lille sjov ting kan man også udskrive en tekststreng omvendt ved hjælp af slicing.
>>> mail[::-1]
'kd.liamkd@rekdeobsnah'
Det som koden siger er, at den skal slice strengen fra start til slut ... og så udskrive den bagfra. Den er meget logisk, for det som den ekstra parameter gør er at bestemme med hvilket spring sætningen skal udskrives. Prøv f.eks. følgende:
>>> mail[::2]
'hnbekrdmi.k'
Her udskriver den kun hver andet tegn i strengen.
len() tæller det samlede antal tegn der er i en streng - også mellemrum
Eksempel: Hvor mange tegn er der i min.email@dkmail.dk
>>> len(mail)
21
Hvis man vil undersøge hvor mange gange noget forekommer i en tekstreng anvender man count(). Hvis vi f.eks. vil finde antal @ i vores mail vil det altså blive:
>>> mail.count("@")
1
@ står altså en gang i mailen hansboedker@dkmail.dk en gang.
Se programmet herunder hvor det bliver anvendt i praksis.
mail = input("Indtast mail: ")
if mail.count("@") == 1:
print ("\n\tDer er @ i mailen.")
else:
print ("\n\tDer mangler @ i mailen.")
Output
========================= RESTART: /home/tj/test.py =========================
Indtast mail: fakeuser@fakemail.dk
Der er @ i mailen.
For at finde tekstelementer i tekststrenge anvender vi funktionen find(). Den anvendes på følgende måde:
>>> mail.find("@")
11
Lad os lave et program der finder ud af hvad brugernavnet er - altså det som står foran @
mail = input("Indtast mail der skal tjekkes brugernavn: ")
mail_a = mail.find("@")
username = mail[:mail_a]
print("Brugernavnet er: {0}".format(username))
Output
========================= RESTART: /home/tj/test.py =========================
Indtast mail der skal tjekkes brugernavn: fakeuser@fakemail.dk
Brugernavnet er: fakeuser
Ofte har man brug for at erstattet eller bytte noget i en tekststreng.
>>> 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 blot output. For at beholde ændringen skal man lave den som en ny variabel.
>>> ny_sætning = sætning.replace("i skole","på arbejde")
>>> ny_sætning
'Kurt kommer for sent på arbejde'
Forestil dig et program hvor der skal indtastes decimaltal. Her vil brugeren måske komme til at lave et , (komma) i stedet for et . (punktum).
def indtast(a):
a = a.replace(",",".")
print(a)
indtast("3,456")
indtast("3.456")
Output
========================= RESTART: /home/tj/test.py =========================
3.456
3.456
Lav en kode hvor du tjekker en indtastet mail ud fra følgende parametre:
Udskriften skal enten angive om mailen er korrekt eller angive fejlene. Hvis der er fejl skal den bede om en ny indtastning.
Output
========================= RESTART: /home/tj/test.py =========================
Indtast din mail: t_d.g ← Brugerinput
Mailen har for få tegn (mindre end 7)
Mailen mangler @
Det er ikke en .dk mail
Indtast din mail: fakeuser@fakemail.dk ← Brugerinput
Mailen er konstrueret korrekt
En mail består af 3 dele. Brugernavn, domæne og landekode. Her er de angivet med farver. fakeuser@fakemail.dk
Ændr koden så den også svarer med alle de data du undersøger for:
Output
========================= RESTART: /home/tj/test.py =========================
Indtast din mail: t_g.k
Mailen har for få tegn (mindre end 7)
Mailen mangler @
Det er ikke en .dk mail
Indtast din mail: fakeuser@fakemail.dk
Mailen er konstrueret korrekt
Mailen er: fakeuser@fakemail.dk
Mailen har i alt 20 tegn
Brugernavnet er: fakeuser
Domænenavnet er: fakemail
Det er en .dk mail
Lav et program der tjekker IP-Adresse. En IP-adresse består af 4 tal mellem 0 og 255 adskilt af 3 punktummer, f.eks: 192.168.0.13.
Programmet skal undersøge om IP-adressen er privat eller ej. Private IP-adresser er følgende:
Du skal altså lave et program der under søger om IP-adressen befinder sig indenfor de intervaller der ovenfor er angivet med rødt.
Lav et program hvor brugerens input bliver udskrevet baglæns. Her: Ubrugeligt... men sjov
Output
vojs nem ...tgilegurbU