Python del 2 - Strängar

Mycket kul kan göras med siffror, men det blir roligare om man kan använda text också. Text matas in i strängar. I Python skapar man en sträng genom att skriva texten innanför antingen enkla eller dubbla cituationstecken. Jag personligen föredrar dubbla, och python föredrar enkla. Välj själv vilket du gillar bäst. Vi ska snart visa, men först en sak...

För er som inte programmerat förut ska jag också förklara vad det betyder att "escapea" något. Skriver man ett backslash (\) så betyder det att man skriver ett specialtecken eller liknande. Då kan man t ex skriva tecken som annars har specialbetydelser. En radbrytning är ett sådant tecken, och skrivs \n. En tabb skrivs som \t.

Slutligen: svenska tecken. Dessa fungerar bra att använda i Python, men om din dator använder utf-8 som standardkodning kommer den interna representationen inte se ut som vi är vana. Däremot kommer det fungera finfint när vi skriver ut tecknet.

  1. >>> Hej Världen!
  2. Traceback(most recent call last):
  3. File "<stdin>", line 1
  4. Hej Världen!
  5. ^
  6. Syntax Error: invalid syntax
  7. >>> 'Hej Världen!' #Vi glömde fnuttarna innan
  8. 'Hej Världen!'
  9. >>> "Hej Världen!" #Tolken föredrar oftast att skriva med enkelfnuttar...
  10. 'Hej Världen!'
  11. >>> "Testar att skriva en 'enkelfnutt'" #...men inte alltid
  12. "Testar att skriva en 'enkelfnutt'"
  13. >>> 'Testar att skriva en "dubbelfnutt"' #Motsatsen går också
  14. 'Testar att skriva en "dubbelfnutt"'
  15. >>> "Skriver \" inne i en \"-sträng" #Man kan escapea ' och " i en sträng
  16. 'Skriver " inne i en "-sträng'
  17. >>> "åäö är svenska tecken"
  18. '\xc3\xa5\xc3\xa4\xc3\xb6 \xc3\xa4r svenska tecken'
  19. >>> print "åäö är svenska tecken"
  20. åäö är svenska tecken

Tolken väljer det smidigaste sättet att skriva det på, med du kan skriva med vad som genom att escapea. När vi bara skriver strängen som vi gör i de tidigaste fallen får vi bara en intern representation, och då ser åäö konstigt ut. Skriver vi ut innehållet "på riktigt" ser vi att åäö blir rätt igen. Det hör till saken att när vi kommer att skapa program sen så kommer vi bara se det "riktiga" innehållet.

Det finns ett annat sätt att skapa strängar: att använda tredubbla " eller ', alltså """ eller '''. Den här typen uppför sig lite anorlunda. En sträng sträng som inleds med tre fnuttar tar slut när tre likadana fnuttar påträffas - oavsett ", ', nya rader och allt annat.

Man kan göra variabler som sträcker sig över flera rader även med "vanliga" strängar. Ett backslash på slutet av raden gör så att tolken läser vidare på raden under, men den gör ingen radbrytning. Radbrytningar görs med \n.
  1. >>> a = """Usage:
  2. ... -v Displays version
  3. ... -h Display this help text"""
  4. >>> print a
  5. Usage:
  6. -v Displays version
  7. -h Display this help text
  8. >>> a = "Usage: \n\
  9. ... -v Displays version \n\
  10. ... -h Display this help text"
  11. >>> print a
  12. Usage:
  13. -v Displays version
  14. -h Display this help text

Strängar i Python är oföränderliga. När de väl skapats ser de ut som de gör. Du kan inte lägga till eller ta bort saker från en sträng. Du kan utgå från en sträng, och sen spara en sträng baserad på den fast med ändringar, i en ny sträng med samma namn som den första, med det är inte samma.

Man kan lägga ihop strängar med varandra med plus, och man kan också multiplicera en sträng så att den skrivs ut flera gånger. Exempel!
  1. >>> a= "Utter!" # Mitt favoritdjur
  2. >>> b = "Gnu"
  3. >>> a + b
  4. 'Utter!Gnu'
  5. >>> a*3 + b
  6. 'Utter!Utter!Utter!Gnu'


Istället för att sätta ihop småsträngar till en stor vill man ofta göra tvärt om. Precis som i många andra språk kan man använda fyrkantsklamrar för att ta fram ett tecken ur strängen såhär:
  1. >>> a = "abcd"
  2. >>> a[1]
  3. 'b'

Man börjar - som så ofta i programmeringssammanhang - räkna från noll. Tecken noll är alltså a, tecken ett är b, tecken två är c, och tecken tre är d.

I Python har vi även möjligheten att ta ut längre bitar på samma sätt, genom att skriva start- och sluttecknet på var sin sida om ett kolon innanför fyrkantsklamrarna. Exempel:
  1. >>> a="Hejsan Svejsan" #Vi skapar en sträng att leka med
  2. >>> a[1] #Tar fram endast ett tecken
  3. 'e'
  4. >>> a[1:2] #Samma som ovan, bara lite krångligare skrivet
  5. 'e'
  6. >>> a[1:3] #Flera bokstäver
  7. 'ej'
  8. >>> a[:3] #Betyder ta de tre första tecknen
  9. 'Hej'
  10. >>> a[-3:] #Ta de tre sista
  11. 'san'
  12. >>> a[3:] #Ta alla utom de tre första
  13. 'san Svejsan'
  14. >>> a[:-3] #Välj alla utom de tre sista
  15. 'Hejsan Svej'
  16. >>> a[2] = "ö" #Vi kan passa på att försöka ändra på strängen
  17. Traceback(most recent call last):
  18. File "<stdin>", line 1, in ?
  19. Type Error: object doesn't support slice assignment

Som ni ser så ger t ex 1:3 bara två tecken, fast det är lätt att tänka att det kunde vara tre (tecknena 1, 2, 3). Den officiella guiden förklarar detta på följande sätt:
Det bästa sättet att komma ihåg hur slices i Python fungerar är att tänka sig att siffrorna pekar mellan bokstäverna, där den vänstra sidan av det första tecknet alltid är noll.
Följande illustration av det de sa är också stulen.

+---+---+---+---+---+---+
| S | t | r | ä | n | g |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1 0

Notera att positiva och negativa tal kan kombineras hur som hellst, och man kan även sätta in variabler istället för siffror.

Om du vill skapa en unicode-sträng så skriver du ett u direkt innan dubbelfnuttarna. Dvs
  1. >>> a = u"Unicode!"
Du kan även skapa rå-strängar, som inte tolkar några specialtecken (\n t ex) genom att skriva ett r innan fnutten, med andra ord:
  1. >>> a = r"Råsträng"

Källa: http://blinkenlights.se/