Övning 2

Behandlar tupler, listor, for-loopar och sträng-skivning.

Tupler och Listor

Med en tupel kan man lagra flera värden i en variabel.

>>> mintupel = ("Kalle","Lisa")

Man kan sedan komma åt värdena med hjälp av index. Det första elementet får index = 0, andra index = 1 o.s.v. upp till sista elementet som får index = antal_element-1.

>>> print mintupel[0]
Kalle
>>> print mintupel[1]
Lisa

Tyvärr kan man inte ändra några värden i en tupel så därför finns det en annan typ av följd som kallas för lista som är mycket mer flexibel. För att skapa en lista använder man hakparenteser.

>>> enfinlista = ["Kalle","Lisa"]
>>> print enfinlista[0]
Kalle
>>> print enfinlista[1]
Lisa

Nyheten här är att man även kan ändra värden.

>>> enfinlista = ["Kalle","Lisa"]
>>> enfinlista[0] = "Pelle"
>>> print enfinlista[0]
Pelle
>>> print enfinlista[1]
Lisa

Det finns även ett gäng metoder kopplade till listor. T.ex. append(value), sort(), remove(value) (se Kursboken s. 138 för en fullständig lista).

test = ["Kalle"]
test.append("Lisa")
test.append("Anna")
test.remove("Kalle")
test.sort()

I exemplet ovan skapas först en lista som bara innehåller strängen "Kalle", sen lägger vi till "Lisa" och "Anna". Sedan tar vi bort "Kalle" med remove-metoden. Till sist sorterar vi listan i bokstavsordning. När koden kört klart kommer test alltså se ut såhär: ["Anna","Lisa"].

For-loopen

Med while-loopar så utför man någonting så länge som ett villkor är sant. Med for-loopar går man igenom varje element i en följd.

orden = ("Hej","på","dej")
for ord in orden:
	print ord

Loopen i exemplet ovan körs alltså tre gånger och skriver ut varje element i tupeln. Man kan göra exakt samma sak med en lista:

orden = ["Hej","på","dej"]
for ord in orden: 
	print ord

Även strängar är följder och man kan alltså skriva såhär:

text = "Hej på dej"
for bokstav in text:
	print bokstav

Koden ovan skriver ut varje bokstav i strängen "Hej på dej" på en egen rad.

Ofta när man programmerar vill man räkna upp tal. Då kan man med hjälp av funktionen range() skapa en lista.

>>> range(10)
[0,1,2,3,4,5,6,7,8,9]

Om du vill göra något med varje tal, t.ex. skriva ut det, kan du göra det med en for-loop som vanligt.

for i in range(10):
	print "tal:",i

Sträng-skivning

Med index kan du även plocka ut ett tecken ur en sträng.

>>> text = "Kalle"
>>> print text[3]
l

Exemplet skriver ut ett "l". Men man kan även plocka ut flera tecken i rad:

>>> test = "vattenspridare"
>>> print test[8:12]
rida

Man kan även låta bli att ange startposition eller slutposition så får man en sträng som går från början eller hela vägen till slutet.

>>> text = "tavelsudd"
>>> print text[5:]
sudd
>>> print text[:5]
tavel
>>> print text[:]
tavelsudd
>>> print "n"+text[1:5]+"l"+text[6:]
navelludd

Uppgift: Rövarspråket

Rövarspråket byter ut varje konsonant i en text mot konsonanten + o + konsonanten. Gör ett program som frågar användaren om en mening och sedan skriver ut meningen på rövarspråket.

Lösning

#coding: latin-1
VOKALER = ("A","O","U","Å","E","I","Y","Ä","Ö"," ")
mening = raw_input("Mening: ")
rovarmening = ""
for i in range(len(mening)):
	if mening[i].upper() in VOKALER:
		rovarmening += mening[i]
	else:
		rovarmening += mening[i] + "o" + mening[i]
print rovarmening

Mellanslag måste finnas med bland vokalerna för att annars räknas det som en konsonant så "hej på dej" blir "hohejoj o popå o dodejoj" istället för "hohejoj popå dodejoj". För att programmet ska fungera med andra specialtecken som punkter och frågetecken så måste även dessa läggas in i vokaler. Därför är det egentligen smartare att lägga in alla konsonanter istället för alla vokaler.