for-silmukka

for-silmukassa toistojen määrä määritellään silmukan alkaessa. Toistojen määrittelyssä auttaa range-funktio, jota voi käyttää kolmella eri tavalla: range(toistot), range(alku, loppu), tai range(alku, loppu, askel). Esimerkkejä:

# Tulostetaan Hep! viisi kertaa
# Silmukkamuuttujaa "luku" ei hyödynnetä silmukan sisällä
for luku in range(5):
    print("Hep!")

tulostaa:

Hep!
Hep!
Hep!
Hep!
Hep!

Huomaa, että käytettäessä muotoa range(toistot), range-funktio silmukkalaskuri "luku" saa arvot 0 .. toistot - 1. Eli tässä esimerkissä se saa arvot 0, 1, 2, 3 ja 4:

for luku in range(5):
    print(luku * 10)

Huomaa myös, miten silmukkalaskuri "luku" kasvaa automaattisesti. Koodi tulostaa:

0
10
20
30
40

Kun range-funktion aloitusarvo määrätään käyttämällä muotoa range(alku, loppu), silmukkalaskuri "luku" saavuttaa arvon loppu - 1:

for luku in range(1, 6):
    print(luku) 

tulostaa

1
2
3
4
5

Silmukkalaskurin arvoa voi kasvattaa myös isommalla askeleella muodolla range(alku, loppu, askel). Nyt laskuri "luku" saavuttaa arvon loppu - askel.

for luku in range(100, 110, 2):
    print(luku) 

tulostaa:

100
102
104
106
108

Arvoja voi käydä läpi myös suuremmasta pienempään. Tällöin silmukkalaskuri saavuttaa arvon loppu + 1:

for luku in range(10, 5, -1):
    print(luku)

tulostaa

10
9
8
7
6

Myös merkkijonoja voi käydä läpi for-silmukalla:

for merkki in "Python":
    print(merkki * 5)

tulostaa:

PPPPP
yyyyy
ttttt
hhhhh
ooooo
nnnnn

for-silmukasta voi poistua break-käskyllä samaan tapaan kuin while-silmukasta:

maksimi = int(input("Anna positiivinen kokonaisluku ja tulostan kaikki sitä pienemmät kokonaisluvut\n"))
for luku in range(1, maksimi):
    print(luku)
    if luku == 5:
        print("En jaksa enää")
        break

tulostaa:

Anna positiivinen kokonaisluku ja tulostan kaikki sitä pienemmät kokonaisluvut
> 11
1
2
3
4
5
En jaksa enää

Sisäkkäiset silmukat

Sekä for- että while-silmukoita voi olla useampia sisäkkäin. Tässä esimerkki for-silmukalle:

for luku1 in range(1, 6):
    # Käytetään print-funktiossa välilyöntiä rivinvaihdon sijasta (end = " ")
    print("Luvun", luku1, "kertotaulu lukuun 10 asti:", end = " ")
    for luku2 in range(1, 11):
        print(luku1 * luku2, end = " ")
    # Tulostetaan tyhjä merkkijono, eli pelkkä rivinvaihto
    print("")

tulostaa:

Luvun 1 kertotaulu lukuun 10 asti: 1 2 3 4 5 6 7 8 9 10 
Luvun 2 kertotaulu lukuun 10 asti: 2 4 6 8 10 12 14 16 18 20 
Luvun 3 kertotaulu lukuun 10 asti: 3 6 9 12 15 18 21 24 27 30 
Luvun 4 kertotaulu lukuun 10 asti: 4 8 12 16 20 24 28 32 36 40 
Luvun 5 kertotaulu lukuun 10 asti: 5 10 15 20 25 30 35 40 45 50 

Tulemme hyödyntämään for-silmukkaa huomattavan paljon enemmän kolmannesta kierroksesta eteenpäin, kun pääsemme käsittelemään Pythonin tietorakenteita kuten listoja ja sanakirjoja.

Tehtävä 1.11.1