Behandling af strenge

Slicing

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'
	

Slice en slice

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:

	
>>> "fakeuser@fakemail.dk"[8:]
'@fakemail.dk'
>>> "fakeuser@fakemail.dk"[8:][-2:]
'dk'
	

Bakke snagvendt

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() - antal tegn

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
	

count() - antal forekomster

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.")
	
Indtast mail: fakeuser@fakemail.dk

        Der er @ i mailen.

find() - find forekomster

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))
	
Indtast mail der skal tjekkes brugernavn: fakeuser@fakemail.com

        Brugernavnet er: fakeuser

replace() - erstat forekomster.

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")
	
3.456
3.456

Opgaver

Mail 1

Lav en kode hvor du tjekker en indtastet mail ud fra følgende parametre:

  1. Om den har mere end 7 tegn
  2. Der kun er et @
  3. At det er en ".dk" mail
  4. At @ ikke står mellem de 4 sidste tegn

Udskriften skal enten angive om mailen er korrekt eller angive fejlene. Hvis der er fejl skal den bede om en ny indtastning.

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

Mail 2

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:

  1. Hvad mailen er
  2. Hvor mange tegn mailen indeholder
  3. Hvad er brugernavnet, domænet og landekoden er, samt deres længde.
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

IP-adresse

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:

  • 10.0.0.0 → 10.255.255.255
  • 172.16.0.0 → 172.31.255.255
  • 192.168.0.0 → 192.168.255.255

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.

Bakke snagvendt

Lav et program hvor brugerens input bliver udskrevet baglæns. Her: Ubrugeligt... men sjov

	vojs nem ...tgilegurbU

------------------
(program exited with code: 0)
Press return to continue