Vertaileminen

Takaisin pääsivulle

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.

if-komento

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:

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!

elif-komento

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

Harjoitus

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.

else-komento

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ä.'".

Harjoitus

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.

and-vertailunkytkijä

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

or-vertailunkytkijä

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

Takaisin pääsivulle