Toistaminen

Takaisin pääsivulle

Tehdään ensiksi ohjelma, joka tulostaa merkkijonon "Hei Maailma!" kymmenen kertaa.

# -*- coding: latin-1 -*-

def main():
    print "Hei Maailma!"
    print "Hei Maailma!"
    print "Hei Maailma!"
    print "Hei Maailma!"
    print "Hei Maailma!"
    print "Hei Maailma!"
    print "Hei Maailma!"
    print "Hei Maailma!"
    print "Hei Maailma!"
    print "Hei Maailma!"

main()

Ylläoleva ohjelma kutsuu print-komentoa kymmenen kertaa, ja tulostaa aina saman viestin. Tämä on tapa tulostaa viesti tekee ylläpidettävyydestä vaikeampaa. Jos haluaisit muuttaa tulostettavaa viestiä siten, että viesti olisi "Hei maailma!" viestin "Hei Maailma!" sijaan, joutuisit tekemään muutoksen kymmeneen kohtaa.

Ohjelmakielten kehittäjät ovat huomanneet tämän ongelman, ja luoneet sitä varten komentoja joilla ohjelmakoodia voidaan toistaa.

While

Komento while, luetaan "niin pitkään kun", tarjoaa toiminnallisuuden ohjelman toistamiseen kunnes annettu ehto ei ole enää totta. Vertailtava ehto annetaan samalla tavalla kuin vertailuille if ja elif. Luodaan ohjelma, jolla voidaan tulostaa yllä oleva viesti niin monta kertaa, kuin käyttäjä haluaa. Huomaa että käytämme käyttäjän syöttämää lukua laskurina, josta vähennämme aina yhden jokaisella toistokierroksella. Toisto loppuu kun laskuri päätyy nollaan.

# -*- coding: utf-8 -*-

def main():
    laskuri = int(raw_input("Kuinka monta kertaa viesti tulostetaan? "))

    while laskuri > 0:
        print "Hei Maailma!"
        laskuri = laskuri - 1

main()
Kuinka monta kertaa viesti tulostetaan? 4
Hei Maailma!
Hei Maailma!
Hei Maailma!
Hei Maailma!

Seuraava ohjelma taas kysyisi käyttäjältä salasanaa niin pitkään kuin salasana ei ole oikea. Huomaa että asetamme aluksi muuttujalle salasana arvon "", eli tyhjä merkkijono, jotta voimme käyttää sitä vertailussa. Jotta muuttujassa olevaa arvoa voitaisiin käyttää vertailussa, täytyy sillä olla arvo.

# -*- coding: utf-8 -*-

def main():
    salasana = ""

    while salasana != "salasana":
        salasana = raw_input("Syötä salasana: ")
    
    print "Oikein!"

main()
Syötä salasana: Turnipsi
Syötä salasana: Porkkana
Syötä salasana: Nauris
Syötä salasana: Salasana
Syötä salasana: salasana
Oikein!

Yllä oleva ohjelma toistaa salasanan kysymistä niin pitkään kuin käyttäjän syöttämä salasana ei ole ohjelman vaatima salasana.

Vastaavasti voisimme luoda ohjelman, joka pyytää käyttäjältä positiivisia lukuja. Ohjelman toimintaidea on seuraava: "Niin pitkään kuin käyttäjä syöttää negatiivisen tai nollan, jatketaan luvun kysymistä. Kun käyttäjä syöttää positiivisen luvun, tulostetaan viesti 'Kiitos'." Huomaa, että jotta voisimme käyttää muuttujaa vertailussa, täytyy sillä olla joku alkuarvo. Asetetaan muuttujan arvoksi aluksi luku -1.

# -*- coding: utf-8 -*-

def main():
    luku = -1
    while luku <= 0:
        luku = int(raw_input("Syötä positiivinen luku: "))
    
    print "Kiitos!"

main()
Syötä positiivinen luku: -1
Syötä positiivinen luku: -52.00
Syötä positiivinen luku: 42
Kiitos!

while-true ja break

Edellisessä esimerkissä olemme käyttäneet while-toistoa siten, että se jatkaa niin pitkään kuin sille annettu ehto on totta. Toistorakenteesta on mahdollista poistua myös komennolla break, joka kertoo että tällä hetkellä suoritettavasta toistorakenteesta pitää poistua. Komentoa break käytetään usein totuusarvo True:n kanssa, joka vastaa vertailua joka on aina totta. Antamalla lauseen while True: jatkamme toistoa loputtomiin, tai kunnes toistosta poistutaan break-komennon avulla.

# -*- coding: utf-8 -*-

def main():
    while True:
        salasana = raw_input("Syötä salasana: ")
        if salasana == "salasana":
            break
    
    print "Kiitos!"

main()
Syötä salasana: Omena
Syötä salasana: Banaani
Syötä salasana: Appelsiini
Syötä salasana: Porkkana
Syötä salasana: salasana
Kiitos!

Ylläolevaa toistoa toistetaan niin pitkään, kunnes käyttäjä syöttää merkkijonon "salasana".

Seuraavassa esimerkissä luomme hieman monimutkaisemman ohjelman, joka ensiksi kysyy käyttäjätunnusta, ja sitten salasanaa. Jos salasana ja käyttäjätunnus on oikein, päästään ulos toistolausekkeesta. Muuten ohjelma tulostaa viestin "Väärä käyttäjätunnus tai salasana", ja aloittaa uudestaan kysymällä käyttäjätunnusta.

Toistolauseketta toistetaan siis niin pitkään kunnes käyttäjä syöttää oikean käyttäjätunnuksen ja salasanan. Sovitaan jo ennalta, että käyttäjätunnus on "hauska", ja salasana on "juttu".

# -*- coding: utf-8 -*-

def main():
    while True:
        kayttajatunnus = raw_input("Syötä käyttäjätunnus: ")
        salasana = raw_input("Syötä salasana: ")

        if kayttajatunnus == "hauska" and salasana == "juttu":
            break

        print "Väärä käyttäjätunnus tai salasana!"

    print "Oikein meni!"

main()
Syötä käyttäjätunnus: salainen
Syötä salasana: kala
Väärä käyttäjätunnus tai salasana!
Syötä käyttäjätunnus: hauska
Syötä salasana: juttu
Oikein meni!

Toistorakenteita on myös mahdollista asettaa useampia sisäkkäin. Muutetaan edellistä ohjelmaa siten, että salasanan pitää olla positiivinen numero. Oikea salasana on "2580". Toistetaan salasanan kysymistä niin pitkään kunnes käyttäjä syöttää positiivisen luvun.

# -*- coding: utf-8 -*-

def main():
    while True:
        kayttajatunnus = raw_input("Syötä käyttäjätunnus: ")
        salasana = -1
    
        while salasana < 0:
            salasana = int(raw_input("Syötä positiivinen numeroista muodostuva salasana: "))

        if kayttajatunnus == "hauska" and salasana == 2580:
            break

        print "Väärä käyttäjätunnus tai salasana!"

    print "Oikein meni!"

main()
Syötä käyttäjätunnus: hauska
Syötä positiivinen numeroista muodostuva salasana: 115413
Väärä käyttäjätunnus tai salasana!
Syötä käyttäjätunnus: hauska
Syötä positiivinen numeroista muodostuva salasana: 2580
Oikein meni!

Takaisin pääsivulle