Nada

Föreläsning 3: Textsträngar och tecken

Ett ord, en mening eller en längre text kallas ibland textsträng i datasammanhang. Det är en felöversättning av "string of characters", som i analogi med "string of pearls" (pärlhalsband) frammanar bilden av bokstavstecken uppträdda på ett snöre. En character kan förstås också vara en siffra, ett plustecken, en parentes, en blank, ett japanskt kanatecken och mycket annat. Unicode innehåller över hundratusen tecken och all text i Python är unicode. Dom första 128 kallas för ASCII-alfabetet och är det enda som egentligen får ingå i programkoden. ASCII innehåller nästan alla vanliga tecken, men inte åäöüé£ osv. Därför bör man överst i programmet skriva #coding:latin eller #coding:utf-8 om man vill använda konstiga tecken i print-satser och i kommentarer. Här betyder latin ett alfabet med ytterligare 128 tecken och utf-8 innehåller alla hundratusen unicodetecken. Man får testa vilket som används på ens egen dator.

Objekttypen str

Objekttyperna int,float,complex,str är inbyggda i språket. Man kan lätt översätta mellan dom.
  pi = "3.141592653589793"       # typen str
  x = float(pitext)              # typen float
  y = int(x)                     # typen int => 3
  tre = str(y)                   # typen str => "3" 
Man kan skära sönder och klistra ihop texter så här.
  start = pi[0:4]    => "3.14"   # kan skrivas pi[:4]  
  svans = pi[13:17]  => "9793"   # kan skrivas pi[13:] eller pi[-4:]
  mitt = pi[8:9]     => "6"      # kan skrivas pi[8]
  start+mitt+svans   => "3.1469793" 
Om man vill ha en snygg tabell med tal kan man använda ett trick för att få rak högerkant. Varje utskrift blir här sex positioner.
  for i in range(25):
      kub = i**3
      txt = "      "+str(kub)
      print txt[-6:]

Jämföra texter

I if-satser och while-satser kan även texter jämföras. Vanlig bokstavsordning används, så när som på att Å kommer efter Ä.
  namn = "Henrik"
  if namn=="Henrik":        => True  (exakt lika)
  if namn<"Eriksson":       => False (E före H i alfabetet)
  if namn<"henrik":         => True  (stora bokstäver före små)
  if "Ängel"<"Åsna":        => True  (Ä före Å)

Funktionerna len, chr och ord

För word="smart" är len(word)=5. Så här kan man skriva ut ett ord bakfram. (Försök komma på andra sätt!)
   trams = ""                      # tom sträng
   n = len(word)
   for i in range(n):
       trams = trams + word[n-1-i] # varför n-1?
   print trams
Om man vill se alfabetet kan man skriva ut det med for i in range(256): print i,chr(i) Många skumma tecken som man inte hittar på tangenterna kan man komma åt med anropet chr(). Var står det här egentligen? chr(188)+chr(43)+chr(189)+chr(61)+chr(190) Omvändningen, som är mindre användbar, heter ord och ger ordningsnumret för ett tecken.
ord("@") => 128

Personnumrets hemligheter

Om man vet att pnr = "420119-0818" räknar man lätt fram födelseåret och könet så här.
   born = 1900+int(pnr[:2])
   if pnr[9] in "02468":
       sex = "F"
   if pnr[9] in "13579":
       sex = "M"
Sista siffran (checksiffran) har valts så att nedanstående uträkning visar om det är något fel i personnumret.
# kolla("420119-0818") => True
def kolla(pnr):
    summa=0          
    for i in [1,3,5,7,9]:
        summa+=int(pnr[i])
    for i in [0,2,4,6,8]:
        x=2*int(pnr[i])
        summa+=x//10+x%10
    return (summa%10==0)        => True om summa slutar på 0      

Hemliga språk

Villkoret if tkn in "aeiouyåäö": är användbart för att känna igen vokaler - något som behövs i vissa hemliga språk såsom a-språket.
## "jag heter olle"    översätts till
## "jag hatar alla"
   mening = input("Skriv något inom citattecken:")
   n = len(mening)
   ut = ""
   for i in range(n):
       tkn = mening[i]
       if tkn in "aeiouyåäö":
          ut+="a"
       else:
          ut+=tkn
   print ut

Sidansvarig: <henrik@nada.kth.se>
Senast ändrad 10 oktober 2009
Tekniskt stöd: <webmaster@nada.kth.se>