Loopit
Looppi (eli silmukka) tarkoittaa koodirakennetta, joka suorittaa saman koodin monta kertaa peräkkäin. Looppeja on Pythonissa kahdenlaisia.
While-loop
While-loop toimii näin:
while ehto:
print("looppi")
Syntaksi muistuttaa if-lausetta. Siis jos ehto toteutuu, niin loopin sisällä olevaa koodia suoritetaan kunnes ehto ei enää toteudu. Ehdon toteutuminen tarkistetaan kierrosten välillä, eli vaikka ehto muuttuisi epätodeksi kesken kierroksen, niin jäljellä olevat koodirivit suoritetaan silti.
Loopin pitäisi pystyä loppumaan. Jos ehto pysyy aina totena, niin "looppi"-riviä tulostetaan ikuisesti, eikä koodin suoritus pysty etenemään looppia pitemmälle.
Yksi tapa määritellä,
kuinka monta kertaa loopin sisältö suoritetaan, on tehdä muuttuja, joka laskee, kuinka monta
kertaa looppi on suoritettu. Loopin sisälle lisätään koodirivi, joka korottaa tämän muuttujan
arvoa. Useimmiten tällaiset laskurimuuttujat nimetään i
:ksi, mutta myös muuta nimeä voi
käyttää. Lisäksi silmukan suoritusehdoksi laitetaan vertailu, joka tarkistaa, onko
laskurimuuttujan arvo jo tarpeeksi iso. Esimerkiksi "loopin sisältö suoritetaan, jos laskurin
arvo on pienempi kuin 5":
i = 0
while i < 5:
print("looppi")
i += 1
print("looppi ohi")
looppi
looppi
looppi
looppi
looppi
looppi ohi
i
:n arvoa voi myös käyttää koodissa:
i = 1
while i <= 5:
print(i * "o")
i += 1
o
oo
ooo
oooo
ooooo
Loopin keskeyttämiseen voi käyttää myös break
-avainsanaa. Break siis keskeyttää loopin
suorittamisen (missä kohdassa tahansa), ja suoritus jatkuu loopin jälkeisestä koodirivistä.
Breakkia voi käyttää laskurimuuttujan kanssa näin:
i = 0
while True:
print(i)
i += 1
if i > 5:
break
print("Looppi ohi")
0
1
2
3
4
5
Looppi ohi
For-loop
For-looppi käy läpi jonkin kokoelman (esim. listan) kaikki alkiot yksitellen. For-loop on helppokäyttöinen, koska sitä käyttäessä ei tarvitse laskurimuuttujaa. Tässä esimerkki for-loopista:
lista = [1,5,9,13,17]
for numero in lista:
print(numero)
1
5
9
13
17
Eli for-sanan jälkeen täytyy kirjoittaa uuden muuttujan nimi, johon listan alkiot sijoitetaan yksitellen loopissa, ja in-sanan jälkeen laitetaan listamuuttujan nimi. Sitten sisennettyyn osaan kirjoitetaan koodi, jossa tehdään jotain näille alkioille. Tässä esimerkissä jokainen tulostetaan.
Saman asian pystyy tekemään myös while-loopilla:
i = 0
while i < len(lista):
print(lista[i])
i += 1
For-looppi on siis syntaksiltaan vähän yksinkertaisempi. Kuitenkin jos listan alkioita haluaa
muokata loopin sisällä, niin siihen tarvitsee alkion indeksin (esim. lista[i] += 1
). Jos
esimerkiksi edellisessä for-loopissa muuttaa numero-muuttujan arvoa, niin se ei tee
alkuperäiselle listan alkiolle mitään, vaan pelkästään numero-muuttujan arvo muuttuu yhden
kierroksen ajaksi.
For-loopilla voi myös käydä läpi numeroita:
for i in range(0,5):
print(i)
0
1
2
3
4
Range-funktion avulla määritellään i:n alku- ja loppupiste. Se palauttaa objektin, joka on vähän niin kuin lista, joka sisältää arvot alkupisteestä loppupisteeseen. Huomaa, että tämän "listan" eli myös i:n viimeinen arvo on loppupistettä edeltävä luku. Eli tässä tapauksessa loppupiste on 5, ja viimeinen arvo on 4. For-loopissa i:n arvoa ei tarvitse kohottaa itse, vaan for-looppi siirtyy automaattisesti seuraavaan arvoon.
Myös for-loopin suorituksen voi lopettaa break-avainsanalla.