Loogiset operaattorit
Edellisessä painoindeksin laskevassa ohjelmassa tarkistettiin, että käyttäjän antama pituus ei ole nolla. Voi olla hyvinkin järkevää tarkistaa lisäksi, että pituus ei ole aivan liian suuri. Ei ole mitenkään epätavallista, että käyttäjä ei huomaa sitä, että pituus pitäisi antaa metreinä. Jos käyttäjä antaa vahingossa pituuden senttimetreinä, painoindeksistä tulee järjettömän pieni. Tämä on helppo estää lisäämällä ohjelmaan yksi tarkistus lisää. Jos esimerkiksi käyttäjän antama pituus on vähintään 3, voimme olla täysin varmoja siitä, että pituudessa on jokin virhe.
Aikaisemman ohjelman ehto jos pituus on suurempi kuin 0 pitäisi siis muuttaa muotoon jos pituus on suurempi kuin 0 ja pituus on pienempi kuin 3. Ehto pituus on pienempi kuin 3 on helppo kirjoittaa
pituus < 3.0
Nyt tarvitsemme kuitenkin ehdon, joka on tosi silloin, kun molemmat
ehdoista jos pituus on eri kuin 0 ja pituus on pienempi kuin 3 ovat
tosia ja epätosi aina, kun toinen tai molemmat näistä ehdoista ovat
epätosia. Tällainen ehto saada aikaiseksi käyttämällä and
- eli
ja-operaattoria ehtojen välissä. Aikaisemman ohjelman ehdon
if pituus > 0:
sijasta ohjelmaan kirjoitetaankin nyt
if pituus > 0 and pituus < 3.0:
Muu ohjelma on täysin sama. Operaattori and
on yksi loogisista
operaattoreista. Tärkeitä loogisia operaattoreita on esitelty alla.
operaattori | nimi | merkitys |
and |
ja | tosi, jos molemmat lausekkeet tosia |
or |
tai | tosi, jos vähintään toinen lausekkeista tosi |
not |
ei | tosi, jos seuraava lauseke on epätosi |
Esimerkiksi lausekkeen
x > 0 or y > 0
Arvo on True
(tosi), jos joko muuttujan x
arvo on nollaa
suurempi tai muuttujan y
arvo on nollaa suurempi tai niiden
molempien arvo on suurempi kuin nolla.
Operaatioiden and
ja or
tapauksessa lasketaan ensin ensimmäisen
(operaattoria edeltävän) lausekkeen arvo. Jos jo sen perusteella voidaan
päätellä, että koko lausekkeen arvon on pakko olla True
tai
False
, ei jälkimmäisen lausekkeen arvoa lasketa lainkaan.
Käytännössä tämä tarkoittaa sitä, että jos and
-operaattorin
ensimmäisen operandin arvo on False
, ei toisen operandin arvoa
lasketa, vaan koko lausekkeen arvoksi tulee joka tapauksessa False
.
Vastaavasti, jos or
-operaattorin ensimmäisen operandin arvo on
True
, ei jälkimmäisen operandin arvoa lasketa, vaan koko lausekeen
arvoksi tulee aina True
.
Tällä on merkitystä erityisesti niissä tapauksissa, joissa ensimmäisen lausekkeen totuusarvosta riippuu se, voidaanko jälkimmäisen lausekkeen totuusarvoa laskea lainkaan. Esimerkiksi lausekkeessa
(x != 0) and (10 / x > 0)
laskutoimitus 10 / x
aiheuttaa nollalla jakamisen ja koko ohjelman
kaatumisen, jos muuttujan x
arvo on nolla. Python-ohjelmaan yllä
olevan lausekkeen voi kuitenkin kirjoittaa huoletta, koska ensin
tutkitaan ensimmäisen operandin (x != 0)
totuusarvo. Jos kyseinen
lauseke on epätosi (eli muuttujan x
arvo on 0), ei jälkimmäisen
operandin totuusarvoa tutkita lainkaan ja jakolasku jää näin
suorittamatta.
Luettelon viimeisellä operaattorilla not
on vain yksi operandi.
Esimerkiksi lausekkeen
not (x < 0)
arvo on True
, jos lausekkeen x < 0
arvo on False
, ja
päinvastoin.
Huomautus: Painoindeksiesimerkissä and
-operaattorin käyttö ei ole
välttämätöntä, sillä Python-ohjelmissa muuttujan arvon sijoittumista
jollekin välille pystyy tutkimaan myös kirjoittamalla
vertailuoperaattorit muuttujan molemmin puolin. Rivi
if pituus > 0 and pituus < 3.0:
voidaan siis korvata rivillä
if 0 < pituus < 3.0:
Näin voidaan tehdä kuitenkin vain silloin, kun tutkitaan muuttujan
sijoittumista halutulle välille. Operaattori and
on selvästi
monikäyttöisempi, koska sen avulla voidaan yhdistää kaksi mitä tahansa
ehtoa, joiden ei tarvitse edes sisältää samaa muuttujaa.