Python-oppimateriaali (CHEM-A2600)
while-silmukka
Silmukkarakenteilla voidaan toistaa tietty koodinpätkä useita kertoja. while-silmukassa toistojen määrä riippuu totuusehdosta:
luku = 1 while luku <= 5: # Huomaa sisennys: silmukka toistaa sisennettyä osaa! print(luku) luku += 1 # luku += 1 tarkoitti samaa kuin luku = luku + 1 # (ks. luku matemaattiset perusoperaattorit)
tulostaa
1 2 3 4 5
Toinen esimerkki, jossa ohjelman suoritus jatkuu silmukan jälkeen ensimmäisestä sisentämättömästä lauseesta:
# Alustetaan silmukassa tarvittavat muuttujat luku = 1.0 lukuja = 0 while luku > 0.0: luku = float(input("Anna luku (negatiivinen luku lopettaa):\n")) if luku > 0.0: lukuja += 1 # Silmukan päätyttyä suoritus jatkuu tästä print("Annoit yhteensä", lukuja, "positiivista lukua")
Esimerkkisuoritus:
Anna luku (negatiivinen luku lopettaa):
> 324235
Anna luku (negatiivinen luku lopettaa):
> 12
Anna luku (negatiivinen luku lopettaa):
> 1
Anna luku (negatiivinen luku lopettaa):
> -1
Annoit yhteensä 3 positiivista lukua
Huom! Jos totuusehto ei täyty 1. kierroksella, while-silmukkaa ei suoriteta yhtään kertaa!
Ikuinen silmukka
while-silmukkaa käytettäessä ohjelmointivirhe voi johtaa tilanteeseen, jossa totuusehto ei koskaan muutukaan epätodeksi. Tyypillisin virhe on unohtaa silmukkalaskurin päivitys:
luku = 1 while luku <= 5: print(luku) # Tästä on unohtunut laskurin päivitys # luku += 1 # Seurauksena olisi ikuinen silmukka
Ikuisesta silmukasta pääsee pois painamalla Ctrl+C (ohjelman keskeytys)
break-käsky
while-silmukasta voi poistua milloin tahansa break-käskyllä:
# break-käskyä hyödynnettäessä ikuinen silmukkaehtokaan ei ole ongelma while True: luku = int(input("Anna kokonaisluku ja tulostan sen. Luvulla 0 lopetan: ")) if luku == 0: print("Loppu") break else: print("Annoit luvun", luku)
Esimerkkitulostus:
Anna kokonaisluku ja tulostan sen. Luvulla 0 lopetan: 6 Annoit luvun 6 Anna kokonaisluku ja tulostan sen. Luvulla 0 lopetan: 3 Annoit luvun 3 Anna kokonaisluku ja tulostan sen. Luvulla 0 lopetan: 0 Loppu
continue- ja else-käskyt
while-silmukoissa voi lisäksi hyödyntää continue-komentoa (hyppää silmukan alkuun) ja else-lausetta (suoritetaan silmukan päätyttyä). Näitä emme hyödynnä vielä tässä vaiheessa kurssia.