for-silmukka

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

# 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-funktion 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)

Silmukkalaskurin "luku" arvo kasvaa automaattisesti. Esimerkkikoodi 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 silmukkalaskuri "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 askel on negatiivinen ja 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 enempää")
        break

tulostaa:

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

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

>