Python 3/while-silmukka

While-silmukka muokkaa

Tavallisesti tietokone suorittaa ohjelmaa riveittäin alkaen ensimmäisestä rivistä. Ohjelman ohjausrakenteilla voidaan muuttaa tätä järjestystä tai suorittaa tietyt käskyt vain tiettyjen ehtojen täyttyessä. While-silmukka on yksi python kielen ohjausrakenteista. Seuraava esimerkki havainnollistaa While-silmukan käyttöä.

Esimerkkikoodi:

a = 0
while a < 10 :
    a = a + 1
    print(a)

Ohjelma asettaa aluksi muuttujan a arvoksi 0 ja suorittaa sitten while-silmukkaa niin kauan kuin ehto a<10 on tosi. Jokaisella silmukan kierroksella ohjelma kasvattaa a:n arvoa ja tulostaa sen nykyisen arvon. Viimeisen kierroksen alkaessa a=9 ja sen arvo kasvaa silmukassa yhdellä, joten viimeinen tulostettava arvo on 10.

Esimerkkikoodin tulostus:

1
2
3
4
5
6
7
8
9
10


Toinen esimerkki:

a = 1
s = 0
print('Anna yhteenlaskettava luku')
print('Yhteenlasku lopetetaan numerolla 0')
while a != 0:
    print('summa:', s)
    a = int(input('yhteenlaskettava: '))
    s = s + a
print('Kokonaissumma =', s)

Esimerkkituloste:

>>> 
Anna yhteenlaskettava luku
Yhteenlasku lopetetaan numerolla 0
summa: 0
yhteenlaskettava: 34
summa: 34
yhteenlaskettava: 2
summa: 36
yhteenlaskettava: 1
summa: 37
yhteenlaskettava: 7
summa: 44
yhteenlaskettava: 4567
summa: 4611
yhteenlaskettava: 0
Kokonaissumma = 4611
>>>

Silmukasta voi poistua ennenaikaisesti break-lauseella.

a = 1
s = 0
print('Anna yhteenlaskettava luku')
print('Yhteenlasku lopetetaan numerolla 0')
while a != 0:
    print('summa:', s)
    try:
        a = int(input('yhteenlaskettava: '))
    except ValueError:
        print("Virheellinen luku. Lopetetaan.")
        break
    s = s + a
print('Kokonaissumma =', s)

Esimerkkitulostus

summa: 0
yhteenlaskettava: 34
summa: 34
yhteenlaskettava: 2
summa: 36
yhteenlaskettava: 1
summa: 37
yhteenlaskettava: 7
summa: 44
yhteenlaskettava: x
Virheellinen luku. Lopetetaan.

Silmukan yhden kierroksen voi keskeyttää continue-lauseella. Continue-lauseella siis hypätään seuraavan kierroksen alkuun.

a = 1
s = 0
print('Anna yhteenlaskettava luku')
print('Yhteenlasku lopetetaan numerolla 0')
while a != 0:
    print('summa:', s)
    try:
        a = int(input('yhteenlaskettava: '))
    except ValueError:
        print("Virheellinen luku. Yritä uudelleen.")
        continue
    s = s + a
print('Kokonaissumma =', s)

Esimerkkitulostus

summa: 0
yhteenlaskettava: 34
summa: 34
yhteenlaskettava: 2
summa: 36
yhteenlaskettava: 1
summa: 37
yhteenlaskettava: x
Virheellinen luku. Yritä uudelleen.
summa: 37
yhteenlaskettava: 4567
summa: 4604
yhteenlaskettava: 0

Ikuinen silmukka: Kirjoittamalla while-silmukkaan ehto joka on aina totta, tulee siitä ikuinen silmukka

while True:
    print("Help, I'm stuck in a loop.")

Ikuinen silmukka voidaan pysäyttää CTRL-C näppäinyhdistelmällä komentorivillä. Ikuisenkin silmukan voi päättää silmukan sisällä break-käskyllä.

Ikuinen silmukka on hyödyllinen, kun emme etukäteen tiedä milloin silmukka lopetetaan.

while True:
    syöte = input("Anna komento: ")
    if syöte == "lopeta":
        break
    print("Suoritetaan komento", syöte)