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:
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")
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ä:
Anna salasana: kissa Tervetuloa
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.
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ä:
Kotijoukkueen maalimäärä: 4 Vierasjoukkueen maalimäärä: 2 Kotijoukkue voitti!
Kotijoukkueen maalimäärä: 0 Vierasjoukkueen maalimäärä: 6 Vierasjoukkue voitti!
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.")
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, joka ei täytä ehtoa jossain if
- tai elif
-lauseessa, ohjelmassa ei suoriteta mitään ehtolauseen kolmesta lohkosta.
Joulukalenteri Mikä päivä nyt on? 1.1. Kiitos ja hei.
Log in to view the quiz