Osa 2

Lisää ehtolauseita

Tarkastellaan ohjelmaa, joka tulostaa tiedon siitä, onko käyttäjän syöte negatiivinen vai positiivinen tai nolla:

luku = int(input("Anna luku: "))

if luku < 0:
    print("Luku on negatiivinen")

if luku >= 0:
    print("Luku on positiivinen tai nolla")

Ohjelma on hiukan kömpelö. Jokaisen mahdollisen syötteen kohdalla halutaan suorittaa vain toinen lohkoista, koska aina pätee joko luku < 0 tai luku >= 0. Ensimmäinen vertailu sisältää tavallaan kaiken olennaisen: jos tulos on tosi, luku on negatiivinen, ja jos se on epätosi, luku on positiivinen tai nolla.

Toisen vertailun sijasta onkin usein näppärämpää luoda vaihtoehtoinen haara, joka suoritetaan, jos ehto on epätosi. Tätä tarkoitusta varten käytetään else-lausetta.

Edellinen esimerkki kirjoitettuna uudestaan:

luku = int(input("Anna luku: "))

if luku < 0:
    print("Luku on negatiivinen")
else:
    print("Luku on positiivinen tai nolla")

Kun käytetään if-else-rakennetta, suoritetaan vaihtoehtoisista lohkoista aina jompikumpi. Seuraava kuva havainnollistaa asiaa:

2 2 1

Huomaa, että else-haaraa ei voi olla olemassa ilman edeltävää if-haaraa. Koko if-else-rakenne lohkoineen muodostaa yhden ehtolauseen.

Seuraava esimerkki tutkii, onko käyttäjän syöttämä luku parillinen vai ei. Parillisuuden selvittämiseen käytetään jakojäännösoperaattoria %. Jakojäännöksellä on kätevä testata luvun parillisuutta: jos luvun jakojäännös kahdella on nolla, luku on parillinen, ja muuten pariton.

luku = int(input("Anna luku: "))

if luku % 2 == 0:
    print("Luku on parillinen")
else:
    print("Luku on pariton")
Esimerkkitulostus

Anna luku: 5 Luku on pariton

Kolmas esimerkki, jossa vertaillaan merkkijonojen samuutta:

oikea = "kissa"
salasana = input("Anna salasana: ")

if salasana == oikea:
    print("Tervetuloa")
else:
    print("Pääsy kielletty")

Kaksi esimerkkisuoritusta eri syötteillä:

Esimerkkitulostus

Anna salasana: kissa Tervetuloa

Esimerkkitulostus

Anna salasana: apina Pääsy kielletty

Vaihtoehtoiset haarat elif-lauseella

Usein vaihtoehtoja on kuitenkin enemmän kuin kaksi. Esimerkiksi jalkapallo-ottelun lopputulosta käsitellessä olisi hyvä varautua kolmeen vaihtoehtoiseen lopputulokseen kotijoukkueen kannalta: voitto, häviö tai tasapeli.

Ehtolausetta voidaan laajentaa elif-haaralla. Se on lyhenne sanoista "else if", ja tarkoittaa nimensä mukaisesti vaihtoehtoa alkuperäiselle ehdolle.

2 2 2

Tarkastellaan esimerkkiä, jossa selvitetään ottelun voittaja:

maalit_koti = int(input("Kotijoukkueen maalimäärä: "))
maalit_vieras = int(input("Vierasjoukkueen maalimäärä: "))

if maalit_koti > maalit_vieras:
    print("Kotijoukkue voitti!")
elif maalit_vieras > maalit_koti:
    print("Vierasjoukkue voitti!")
else:
    print("Tasapeli!")

Kolme esimerkkitulosta eri syötteillä:

Esimerkkitulostus

Kotijoukkueen maalimäärä: 4 Vierasjoukkueen maalimäärä: 2 Kotijoukkue voitti!

Esimerkkitulostus

Kotijoukkueen maalimäärä: 0 Vierasjoukkueen maalimäärä: 6 Vierasjoukkue voitti!

Esimerkkitulostus

Kotijoukkueen maalimäärä: 3 Vierasjoukkueen maalimäärä: 3 Tasapeli!

Esimerkissä ehtolauseessa on siis kolme vaihtoehtoista haaraa, joista suoritetaan aina yksi. Ehtolauseessa elif-haaroja voi olla useampia, eikä else-haara ole pakollinen.

Esimerkiksi:

print("Joulukalenteri")
pvm = input("Mikä päivä nyt on? ")

if pvm == "24.12.":
    print("Nyt on jouluaatto")
elif pvm == "25.12.":
    print("Nyt on joulupäivä")
elif pvm == "26.12.":
    print("Nyt on tapaninpäivä")

print("Kiitos ja hei.")
Esimerkkitulostus

Joulukalenteri Mikä päivä nyt on? 25.12. Nyt on joulupäivä Kiitos ja hei.

Huomaa, että ehtolauseessa ei edellisessä esimerkissä ole ollenkaan else-haaraa. Jos käyttäjä syöttää jonkin sellaisen päivämäärän, jota ei täytä ehtoa jossain if- tai elif-lauseessa, ohjelmassa ei suoriteta mitään ehtolauseen kolmesta lohkosta.

Esimerkkitulostus

Joulukalenteri Mikä päivä nyt on? 1.1. Kiitos ja hei.

:
Loading...
:
Loading...

Kirjaudu sisään nähdäksesi tehtävän.