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.
Välitehtävä
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.
Välitehtävä
Range komennolla muuttuja käy läpi halutut luvut. Range-komennossa luku saadaan käyttäytymään kolmella tavalla:
Välitehtävä
Keskeytys
Break-komennolla for- tai while-silmukka voidaan keskeyttää.
Välitehtävä
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.
|
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.
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.