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.
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!
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!