onsdag 10 oktober 2012

for-loopen

En annan viktig loop är for-loopen. Den används när man vill upprepa en loop ett bestämt antal gånger eller gå igenom en uppsättning data. Vi tittar på några varianter av denna.

Övning 1.33
Testa denna variant av for-loop:
Tips: Om du vill kan du använda interaktiva skalet och skriva hela loopen på en rad. 
 
for i in range(5) :
    print(i)


Hur det fungerar:
  • Funktionen range(5) skapar en lista med fem heltal [0, 1, 2, 3, 4]. Notera att det första talet är 0 och det sista 4.
  • Variabeln i sätts lika med första värdet i listan, alltså 0.
  • Satsen i loopen utförs.
  • Variabeln i sätts till lika med nästa värde i listan och loopen börjar om tills listan är slut.
 Notera: Precis som i while-loopar kan break användas för att hoppa ur en for-loop.

 Varianter på range()

  • range(a) skapar en lista heltal från och med 0 till och med a-1
  • range(a, b) skapar en lista heltal från och med a till och med b-1
  • range(a, b, c) skapar en lista heltal från och med a till b med steg c
Övning 1.34
Gör om övning 33 men ange:
a) range(-5, 5)
b) range(20,  200, 50)
c) range(10, 0, -1)

Uppgift 1.10
Skriv ett program som talar om vilka tal ett givet heltal är jämnt delbart med.
Tips: Ett tal kan endast vara jämnt delbart med tal mindre än eller lika halva talet. Du behöver bara testa upp till hälften (avrundat uppåt).

Loop i loop

Det går utmärkt att sätta loopar inuti andra loopar. Nedanstående visar hur man kan få fram en multiplikationstabell genom denna metod.

Övning 1.35
Skriv och testa. Tänk efter ordentligt så du säkert förstår vad som händer.

#Multiplikationstabell

for i in range(1,11) : # yttre for-loop för vänstra talet i mult.
    for j in range(1,11) : # inre for-loop för högra talet i mult.
        print("{:0d}*{:0d}={:0d}".format(i,j,i*j), end="\t")
    print() # Ny rad
    print() # Tomrad mellan varje nytt vänstertal

Notera: I vanliga fall blir det automatiskt ny rad efter en print-sats. Detta kan vara opraktiskt när man vill skriva ut listor. Det går att göra så att detta inte sker genom att använda en variant av print där man anger vad som ska vara avslutning av utskriften. Satsen print( "xxx", end="\t") skriver ut xxx men avslutar med tab istället för ny rad. För att få ny rad kan ett tomt print() användas.

Nyckelordet continue

Vi har tidigare lärt oss satsen break som hoppar ur en loop. Ett användbart alternativ till break är continue som gör att programmet går vidare direkt till nästa varv i loopen. Se nedanstående övning:

Övning 1.36
Skriv och testa

for num in range(2, 10):
    if num % 2 == 0:
        print("Fann ett jämnt tal ", num)
        continue
    print("Fann ett ojämnt tal ", num)

Notera: continue går även att använda i while-loopar


Inlämningsuppgift 1.4
Ändra uppgift 1.10 så att den skriver ut delbarheten för alla talen 1 till och med 20.

Forsatsen med texter

I Python och flera andra språk kan for-satser användas för att iterera över inte bara en lista med tal utan också andra följder. Till exempel kan for användas för att stega sig genom en sträng. Ex:

for s in "Python" : print(s)

Övning 1.37
Skriv ett program med for-sats som sätter punkt efter varje bokstav i en inmatad sträng och skriver ut resultatet. Ex: "SWAT" blir "S.W.A.T."

Itereringen över en sträng går alltid från första till sista tecknet. Om du vill iterera i en annan ordning, över delar av strängen eller behöver få reda på index för tecknen så får du skapa en range-funktion enligt nedastående övning.

Övning 1.38
Följande skriver ut en inmatad text baklänges

text = input("Skriv en text: ")
for i in range(len(text), 0, -1) :
    print(text[i-1], end="")


Notera:
Stegningen -1 i range-funktionen för att gå från högre till lägre index.
Användningen av i-1 då range går från och med len(text) till 0 medan index går från och med 0 till och med len(text)-1.
Tillägget end="" i print-satsen för att undvika ny rad mellan tecknen.

Inga kommentarer:

Skicka en kommentar