Toistorakenne

Toistorakenne (while)

Ohjelmoinnissa silmukka tarkoittaa tilannetta, jossa jotakin komentoa, tai komentoja, toistetaan niin kauan kunnes annettu ehto ei ole enää tosi. Silmukat ovat tärkeitä, sillä niillä voidaan automaattisesti toistaa jotakin komentoa tarvittavan monta kertaa tekemättä itse mitään.

Silmukka toistaa komentoa niin kauan, kuin ehto täyttyy.

Silmukka luodaan while-komennolla (suom. sillä aikaa). While-komennon perään kirjoitetaan silmukan ehto ja while-komennon alle kirjoitetaan suoritettava komento. Huomaa kaksoispiste ehdon perässä ja sisennys suoritettavissa komennoissa.

Esimerkki 1.

#Tämä ohjelmaa kysyy käyttäjältä laskun vastausta niin kauan, kunnes oikea vastaus löytyy.

#Luodaan muuttuja "vastaus", joka on aluksi tyhjä.

vastaus = ""

while vastaus != 15: #Ohjelmaa toistaa kysymystä aina väärän vastauksen jälkeen.
[[$ \ \ \ \ \ $]] vastaus = int( input( "Kuinka paljon on kolme kertaa viisi?")) #Kyseessä on kokonaisluku, joten käytetään int-komentoa.

print ("Oikein!")

[[$\vdots$]]

Kuinka paljon on kolme kertaa viisi? 14
Kuinka paljon on kolme kertaa viisi? 15
Oikein!

Välitehtävä

Esimerkki 2.

#Tässä ohjelmassa tulostetaan luvut 1-10 käyttäen while-silmukkaa.

luku = 1

while luku <11: #Silmukka toistuu niin kauan, kuin luku on alle 11.
[[$ \ \ \ \ \ $]]print (luku)
[[$ \ \ \ \ \ $]]luku = luku +1 #Luku kasvaa aina yhdellä.

print ("Loppu")

[[$\vdots$]]

1
2
3
4
5
6
7
8
9
10
Loppu

Välitehtävä

For-silmukka

For-komennolla jokin muuttuja saadaan käymään läpi halutut arvot. Range-komennon ja for-silmukan yhdistämällä muuttuja käy läpi haluttuja lukuja.

Esimerkki 3.

#Tässä ohjelmassa muuttuja "n" saa arvot 0, 1, 2, 3, 4 ja 5 ja tulostuu jokaisella kerralla.

for n in range(6): #Muuttuja n käy läpi luvut 0, 1, 2, 3, 4 ja 5 range(6) komennolla.
[[$ \ \ \ \ \ $]] print (n)

[[$\vdots$]]

0
1
2
3
4
5

Välitehtävä

Esimerkki 4.

#Tässä ohjelmassa muuttuja "n" saa arvot 0, 1, 2, 3, 4 ja 5 ja kertoo luvut itsellään.

for n in range(6): #Muuttuja n käy läpi luvut 0, 1, 2, 3, 4 ja 5 range(6) komennolla.
[[$ \ \ \ \ \ $]] print ("Luku", n, "kerrottuna itsellään on", n * n)

[[$\vdots$]]

Luku 0 kerrottuna itsellään on 0
Luku 1 kerrottuna itsellään on 1
Luku 2 kerrottuna itsellään on 4
Luku 3 kerrottuna itsellään on 9
Luku 4 kerrottuna itsellään on 16
Luku 5 kerrottuna itsellään on 25

Range komennolla muuttuja käy läpi halutut luvut. Range-komennossa luku saadaan käyttäytymään kolmella tavalla:

Komento Merkitys Esimerkki Luvut
range(luku) Käydään läpi luvut nollasta annettuun
lukuun asti ykkösen välein.
range(7) 0, 1, 2, 3, 4, 5, 6
range(1. luku, 2. luku) Käydään läpi luvut 1. luvusta 2. lukuun ykkösen välein range(2, 5) 2, 3, 4
range(1. luku, 2. luku, askelväli) Käydään läpi luvut 1. luvusta 2. lukuun tietyn välein range(3, 8, 2) 3, 5, 7


Esimerkki 5.

#Tämä ohjelma tulostaa luvun viisi kertotaulun eli lukuja vitosen välein.

for n in range(0, 51, 5):
[[$ \ \ \ \ \ $]] print (n)

[[$\vdots$]]

0
5
10
15
20
25
30
35
40
45
50

Välitehtävä

Esimerkki 6.

#Tulostetaan kaikki kolmen kirjaimen kirjainyhdistelmät, jotka sisältävät kirjaimia A, B tai C.

lista = ["A", "B", "C"] #Listoista lisää seuraavassa kappaleessa.

for i in lista:
[[$ \ \ \ \ \ $]] for j in lista:
[[$ \ \ \ \ \ $]] [[$ \ \ \ \ \ $]] if j == i:
[[$ \ \ \ \ \ $]] [[$ \ \ \ \ \ $]] [[$ \ \ \ \ \ $]] continue
[[$ \ \ \ \ \ $]] [[$ \ \ \ \ \ $]] for k in lista:
[[$ \ \ \ \ \ $]] [[$ \ \ \ \ \ $]] [[$ \ \ \ \ \ $]] if k == j or k == i:
[[$ \ \ \ \ \ $]] [[$ \ \ \ \ \ $]] [[$ \ \ \ \ \ $]] [[$ \ \ \ \ \ $]] continue
[[$ \ \ \ \ \ $]] [[$ \ \ \ \ \ $]] [[$ \ \ \ \ \ $]] print (i,j,k)

[[$\vdots$]]

ABC
ACB
BAC
BCA
CAB
CBA

Keskeytys


Break-komennolla for- tai while-silmukka voidaan keskeyttää.

Esimerkki 7.

for n in range(1100):
[[$ \ \ \ \ \ $]]print (n)

[[$ \ \ \ \ \ $]]if n >= 10:
[[$ \ \ \ \ \ $]] [[$ \ \ \ \ \ $]] break

#Ilman break-komentoa ohjelma tulostaisi numerot 1100 asti.

[[$\vdots$]]

0
1
2
3
4
5
6
7
8
9
10

Välitehtävä

Tehtäviä

1. a) Luo ohjelma, joka kysyy käyttäjältä salasanaa kunnes se on oikein.
b) Luo ohjelma, joka kysyy käyttäjältä käyttäjätunnusta ja salasanaa kunnes ne ovat oikein.

2. a) Luo ohjelma, joka tulostaa luvut 1-20 for-silmukan avulla.
b) Luo ohjelma, joka tulostaa luvut 1-20 while-silmukan avulla.

3. a) Luo ohjelma, joka tulostaa luvun 3 kertotaulun for-silmukan avulla.
b) Luo ohjelma, joka tulostaa luvun 3 kertotaulun while-silmukan avulla.

Syventäviä tehtäviä

Korjaa edellisessä kappaleessa aloittamaasi ohjelmaa siten, että väärän vastauksen jälkeen ohjelma pyytää yrittämään uudestaan kunnes oikea vastaus löytyy.

4.  
Luo ohjelma, joka kysyy alkuaineiden kemiallisia merkkejä ja antaa pisteitä oikeista vastauksista.

5. Luo ohjelma, joka kysyy Kotkan asukaslukua kunnes vastaus on 5000 asukkaan tarkkuudella oikein.