Monet ohjelmat tarvitsevat toimiakseen tapaa, muuttujiin varastoitujen arvojen vertailemiseen. Esimerkiksi pelihahmojen törmäysten tarkistaminen ("Onko piste niin lähellä että törmätään?") ja käyttäjän näppäimistön kuuntelu ("Onko näppäimistöllä painettu nappia? Onko painettu nappi nuoli ylöspäin?") tarvitsevat toimiakseen vertailuja.
Vertailut tapahtuvat if
-komennolla. Komennon if
jälkeen tulee itse vertailu, jota seuraa kaksoispiste (:). Seuraavilla riveillä on sisennettynä toiminnallisuus, joka suoritetaan jos vertailu on totta.
Vertailuoperaatioita on:
>
(suurempi kuin). Esimerkiksi if luku1 > luku2:
# -*- coding: utf-8 -*- def main(): suomen_vakiluku = 5375276 ruotsin_vakiluku = 9408028 if ruotsin_vakiluku > suomen_vakiluku: print "Ruotsissa asuu enemmän ihmisiä kuin Suomessa." main()
Ruotsissa asuu enemmän ihmisiä kuin Suomessa.
# -*- coding: utf-8 -*- def main(): numero = int(raw_input("Syötä luku: ")) if numero > 5: print "Syöttämäsi luku on suurempi kuin 5." main()
Syötä luku: 6 Syöttämäsi luku on suurempi kuin 5.
<
(pienempi kuin). Esimerkiksi if luku1 < luku2:
# -*- coding: utf-8 -*- def main(): energia = 0 minimi = 1 if energia < minimi: print "Energia loppui." main()
Energia loppui.
==
(yhtäsuuri kuin). Esimerkiksi if luku1 == luku2:
# -*- coding: utf-8 -*- def main(): seina = 0 sijainti = 0 if sijainti == seina: print "Osuit seinään!" main()
Osuit seinään!
Voimme vertailla myös syötettyjä merkkijonoja yhtäsuuruusvertailulla, esimerkiksi seuraava salasanan vertailu:
# -*- coding: utf-8 -*- def main(): salasana = raw_input("Stop! Mikä on salasana? ") if "salasana" == salasana: print "Oikein!" main()
Stop! Mikä on salasana? salasana Oikein!
Huomaa että yhtäsuuruusvertailussa käytetään kahta yhtäsuuri kuin-merkkiä. Yksi yleisimmistä ohjelmoijien tekemistä virheistä on asettaa vain yksi yhtäsuuri kuin-merkki vertailuun, jolloin vasemmalla olevaan muuttujaan yritetään asettaa oikealla olevan muuttujan arvo! Python-kieli antaa tästä onneksi virheen, esimerkiksi seuraava vertailu antaisi virheen SyntaxError: invalid syntax, joka voidaan lukea suomeksi "virheellinen syntaksi". Syntaksilla viitataan ohjelmakoodin rakenteeseen, eli virhe kertoo että ohjelmakoodin rakenne on väärä.
# -*- coding: utf-8 -*- def main(): salasana = raw_input("Stop! Mikä on salasana?") if salasana = "salasana": # <- Tässä kohtaa on virhe! print "Oikein!" main()
!=
(erisuuri kuin). Esimerkiksi if luku1 != luku2:
# -*- coding: utf-8 -*- def main(): seina = 0 sijainti = 0 if sijainti != seina: print "Et osunut seinään!" main()
Et osunut seinään!
Lisäksi voimme yhdistää vertailuja seuraavasti:
>=
(suurempi tai yhtäsuuri kuin). Esimerkiksi if luku1 >= luku2:
<=
(pienempi tai yhtäsuuri kuin). Esimerkiksi if luku1 <= luku2:
Vertailtaessa arvojen ei ole pakko olla muuttujia, vaan ohjelmoija voi myös vertailla arvoja myös ennalta asetettuun arvoon. Esimerkiksi seuraava lämpötilan vertailu: jos lämpötila on alle 0, vesi jäätyy.
# -*- coding: utf-8 -*- def main(): lampotila = -22 if lampotila < 0: print "On niin kylmä että vesi jäätyisi!" main()
On niin kylmä että vesi jäätyisi!
Useampia ehtoja voi kytkeä sarjaksi käyttämällä elif
-komentoa. Jos komento if
luetaan "jos", luetaan komento elif
"muuten jos". Komento elif
seuraa aina komentoa if
tai toista elif
-komentoa.
# -*- coding: utf-8 -*- def main(): lampotila = -22 if lampotila < 0: print "On niin kylmä että vesi jäätyisi!" elif lampotila > 0: print "On niin lämmintä että vesi ei jäädy." main()
On niin kylmä että vesi jäätyisi!
Yllä oleva esimerkki tulostaa viestin "On niin kylmä että vesi jäätyisi!".
Miten ylläolevaa esimerkkiä tulee muuttaa jotta ohjelma tulostaisi viestin "On niin lämmintä että vesi ei jäädy."? Vastaus: Muuta muuttujan lampotila arvoa siten, että se on suurempi kuin 0.
Komennot if
ja elif
tarvitsevat toimiakseen ehdon. Joissain tapauksissa on hyödyllistä luoda vertailu, jossa tehdään jotain vaikkei yksikään vertailu toteutuisi. Tähän tarkoitukseen on olemassa komento else
. Komento else
tulee viimeisenä if
tai elif
-komentojen jälkeen, ja se luetaan "muuten". Tarkastellaan seuraavaa esimerkkiä, jossa vertailemme energian määrää minimiin.
# -*- coding: utf-8 -*- def main(): energia = 0 minimi = 1 if energia < minimi: print "Energia loppui." else: print "Energiaa on jäljellä." main()
Energia loppui.
Ylläolevat vertailut voi lukea "Jos energiaa on vähemmän kuin minimi, tulosta viesti 'Energia loppui.', muuten, tulosta viesti 'Energiaa on jäljellä.'".
Miten voisit muuttaa ylläolevaa koodia siten, että se tulostaisi viestin "Energiaa on jäljellä."? Muuta muuttujan energia arvoa siten, että se on yksi tai suurempi.
Joskus vertailuja täytyy kytkeä useita samaan vertailuun. Esimerkiksi vertailu "Jos pelaaja painaa nappia näppäimistöltä, ja painettu nappi on ylös" toistuu usein tietokonepeleihin liittyvässä näppäimistön käsittelyssä. Vertailuja voi lisätä useampia samaan kytkijäoperaatiolla and
, joka luetaan "ja".
# -*- coding: utf-8 -*- def main(): luku1 = 0 luku2 = 1 luku3 = 2 if luku1 < luku2 and luku1 < luku3: print "Luku 1 on pienempi kuin luku 2 ja luku 3." main()
Luku 1 on pienempi kuin luku 2 ja luku 3.
Toinen hyödyllinen käyttötapaus and
-vertailunkytkijälle on törmäysten tarkastelu. Törmäyksiä tarkasteltaessa voidaan varmistaa, että tietty piste on kahden pisteen välissä. Esimerkiksi vertailulla "Jos piste on suurempi kuin vasen laita, ja pienempi kuin oikea laita" voidaan verrata että piste on kahden arvon välissä.
# -*- coding: utf-8 -*- def main(): vasen = 0 oikea = 64 arvo = 32 if vasen < arvo and arvo < oikea: print "Arvo on vasemman ja oikean välissä." else: print "Arvo on joko pienempi tai yhtäsuuri kuin vasen, tai suurempi tai yhtäsuuri kuin oikea." main()
Arvo on vasemman ja oikean välissä.
Toinen hyödyllinen kyrkijä on or
, joka luetaan "tai". Edellisen esimerkin voi kääntää myös toisinpäin, jossa kahden pisteen välissäolemista voi vertailla käyttäen or
-vertailunkytkijää. Tällöin etsimme tilannetta jossa arvo on pienempi tai yhtäsuurikuin vasen, tai suurempi tai yhtäsuuri kuin oikea.
# -*- coding: utf-8 -*- def main(): vasen = 0 oikea = 64 arvo = 32 if arvo <= vasen or arvo >= oikea: print "Arvo on joko pienempi tai yhtäsuuri kuin vasen, tai suurempi tai yhtäsuuri kuin oikea." else: print "Arvo on vasemman ja oikean välissä." main()
Arvo on vasemman ja oikean välissä.