Osa 4

Iteration

Du kan använda en while-loop för att gå igenom elementen i en lista på samma sätt som vi använde oss av while-loopar för att gå igenom strängar. Det följande programmet skriver ut elementen i en lista på varsin rad:

lista = [3, 2, 4, 5, 2]

plats = 0
while plats < len(lista):
    print(lista[plats])
    plats += 1
Exempelutskrift

3 2 4 5 2

Det här fungerar som avsett, men är onödigt komplicerat eftersom vi behöver använda en hjälpvariabel, den som i exemplet ovan kallas plats, för att hålla koll på det aktuella elementet. Om vi glömmer att uppdatera hjälpvariabelns värde, riskerar vi att hamna i en oändlig loop. Python erbjuder ett enklare sätt för att gå igenom listor, strängar och andra liknande strukturer.

for-loopen

När du vill gå igenom en sekvens eller samling av element i Python, kan du använda dig av for-loopen. Loopen kan till exempel gå igenom alla element i en lista – från det första till det sista.

När man använder en while-loop, vet programmet inte på förhand hur många gånger loopen kommer att köras, dvs. hur många iterationer ("varv") den kommer att gå igenom. Loopen kommer att fortsätta tills villkoret inte längre är sant eller loopen avslutas på ett annat sätt. I en for-loop vet man antalet iterationer på förhand.

Idén är att for-loopen går igenom elementen i samlingen ett för ett och kör samma kod för varje element. Programmeraren behöver inte fundera på vilket element som behandlas och när. Syntaxen för for-loopen ser ut så här:

for <variabel> in <samling>:
    <block>

for-loopen tar det första elementet i samlingen, tilldelar det till en variabel, kör kodblocket. Därefter tilldelas variabeln värdet på det följande elementet i samlingen, varpå kodblocket körs igen. Det här upprepas tills samlingens alla element har gåtts igenom. Efter det fortsätter programmet att köras från den kodrad som kommer efter loopen.

Listan iterointi

Följande program skriver ut alla element i en lista med hjälp av en for-loop:

lista = [3, 2, 4, 5, 2]

for element in lista:
    print(element)
Exempelutskrift

3 2 4 5 2

Jämfört med exemplet i början av den här delen är strukturen mycket enklare att förstå. En for-loop gör det enkelt att gå igenom elementen i en samling från början till slut.

Samma princip gäller också för strängar:

namn = input("Ge mig ditt namn: ")

for tecken in namn:
    print(tecken)
Exempelutskrift

Ge mig ditt namn: Peter P e t e r

Loading

Funktionen range

Man vet ofta hur många gånger man vill upprepa en viss kodsnutt. Det kan till exempel hända att du vill gå igenom talen ett till 100 med en for-loop. I stället för att t.ex. manuellt skapa en lista med alla talen i ([1,2,3,4,5,....,100]), kan vi använda funktionen range som skapar en följd av heltal.

range-funktionen har olika funktionalitet beroende på antalet argument man ger. Det enklaste sättet är att använda ett argument, som då representar antalet element man vill ha i sitt intervall. När man använder ett argument är det första talet alltid 0, vilket innebär att anropet range(n) returnerar talföljden 0 ... n - 1. Vi kan därefter använda det värdet i en for-loop:

for i in range(5):
    print(i)
Exempelutskrift

0 1 2 3 4

Med två heltalsargument kommer funktionen att returnera ett intervall mellan de två talen. Funktionen range(a, b) kommer att ge en följd som startar med a och slutar med b - 1. Precis som med slicing är intervallet halvöppet – b kommer inte med.

for i in range(3, 7):
    print(i)
Exempelutskrift

3 4 5 6

Vi kan ännu också ge ett tredje argument som specificerar avståndet mellan talen i intervallet. Anropet range(a, b, c) kommer att returnera en följd som börjar med a och slutar vid b - 1, där värdena ökar med c för varje steg.

for i in range(1, 9, 2):
    print(i)
Exempelutskrift

1 3 5 7

Avståndet eller steget kan också vara negativt. Då kommer intervallet att vara ordnat i fallande ordning. Observera att vi då behöver byta plats på de två första argumenten:

for i in range(6, 2, -1):
    print(i)
Exempelutskrift

6 5 4 3

Loading

Från intervall till lista

Funktionen range returnerar ett range-objekt som på flera sätt fungerar som en lista, men i verkligheten inte är det. Om du försöker skriva ut värdet som funktionen returnerar kommer du bara att se en beskrivning av range-objektet:

tal = range(2, 7)
print(tal)
Exempelutskrift

range(2, 7)

Funktionen list konverterar ett intervall till en lista. Den nya listan kommer att innehålla de värden som finns i intervallet. Vi kommer att bekanta oss närmare med detta i fortsättningskursen som kommer efter den här kursen.

tal = list(range(2, 7))
print(tal)
Exempelutskrift

[2, 3, 4, 5, 6]

En påminnelse om de automatiska testerna

Tills nu har de övningar som krävt att du skriver en funktion haft färdiga mallar som sett ut på följande sätt:

# din lösning ska skrivas här

# det lönar sig att testa på funktionen här, på följande sätt
if __name__ == "__main__":
    mening = "jag gillar blåbärspaj så länge den inte innehåller ägg"

    print(ord_ett(mening))
    print(ord_tva(mening))
    print(sista_ordet(mening))

Från och med nu kommer det inte längre att finnas påminnelser om att använda if __name__ == "__main__" -blocket. De automatiska testerna kommer fortsättningsvis ändå att kräva dem, så du måste själv lägga till blocket i din kod när du testar dina funktioner inom programmets huvudfunktion.

Obs! Vissa övningar, som Palindrom i den här delen, förutsätter att du skriver kod som använder sig av den funktion du skapat. Den här koden bör inte läggas i if __name__ == "__main__" -blocket. De automatiska testerna kör ingen kod inom dessa block, så din lösning kommer inte att vara fullständig om du placerar dina funktionsanrop där.

Loading
Loading
Loading
Loading

I dessa uppgifter kommer vi att använda listor som argument och returvärden. Det här såg vi på i den förra delen.

Loading
Loading
Loading

Hitta det bästa eller sämsta värdet i en lista

En vanlig programmeringsuppgift är att hitta det bästa eller sämsta värdet i en lista enligt något visst kriterium. En enkel lösning är att använda en hjälpvariabel för att komma ihåg vilket av elementen som tillsvidare är det mest "optimala". Det mest "optimala" elementet jämförs i varje runda med följande element, varvid det "optimala" antingen hålls oförändrat eller uppdateras till det senaste elementet. När loopen avslutas kommer hjälpvariabeln att innehålla det värde man söker efter.

Här är ett utkast som inte ännu fungerar:

bast = start # startvärdet beror på situationen
for element in lista:
    if element bättre än bast:
        bast = element

# vi vet nu det bästa värdet

Detaljerna kring den slutliga koden beror på typen av element i listan och vad kriteriet är för att välja ut det bästa (eller sämsta) elementet. Ibland kan du behöva fler än en hjälpvariabel.

Låt oss öva på den här metoden.

Loading
Loading
Loading
Loading...
:
Loading...

Log in to view the quiz

Du har nått slutet av den här delen! Fortsätt till nästa del:

Se dina poäng genom att klicka på cirkeln nere till höger av sidan.