Ohjausrakenteet, valinta if-else


if-lause
Kaikkien ohjausrakenteiden tai ohjauskäskyjen perusrakenne on ehto- eli if-lause.
if-ehtolauseilla voidaan ohjata ohjelman toimintaa erilaisten ehtojen avulla.
Ehtolauserakenteita on erilaisia eri käyttötarkoituksia varten.
If-lause näyttää Python-kielessä (ja muissakin kielissä) tällaiselta:

if-lauseen yleinen muoto, formaatti:

if (ehto):
      lause

Sulkujen sisällä oleva ehto voi olla mikä tahansa lauseke, tavallisimmin se on vertailulauseke.
Siinä verrataan kahden arvon suuruutta keskenään, esim. onko y suurempi kuin x; y > x?
Jos ehto on tosi, true, suoritetaan lause. Muuten ei.
Jos ulkona sataa, otan sateenvarjon, muuten en”.

Vertailuun tarvitaan vertailuoperaatioita.

Vertailuoperaatio Selite
< strictly less than, pienempi kuin
<= less than or equal to, pienempi tai yhtäsuuri
> greater than, suurempi kuin
>= greater than or equal to, suurempi tai yhtäsuuri
== equal to, yhtäsuuri
!= tai <> not equal to, erisuuri


if-mallikoodi

Muuttujien nimissä emme käytä ääkkösiä! Kommenteissa se on sallittua.

Mallikoodin toiminta on helppo ymmärtää jos olet tehnyt edelliset harjoitukset huolella.
Ainoa iso asia on sisennys.
Tutkitaan se huolella.

Koodin sisennys
Katso tarkkaan mallikoodia:
if-komennon jälkeen tulee ehto ja kaksoispiste,
jonka jälkeen tuleva komentolause sisennetään tabuloinnin verran oikealle.
Sisentäminen tapahtuu Thonnyn kanssa toimiessa automaattisesti.
Kun lohko sulkeutuu, sisennys loppuu.
Pythonissa ohjelmalohkon alku ilmaistaan sisentämällä koodia.
Kaikki käskyrivit jotka kuuluvat ko lohkoon (ovat loogisesti samaa ryhmää), sisennetään samaan tasoon.
Lopettamalla sisennys ilmaistaan Python-tulkille, että lohko on loppu.
Nämä opitaan seuraavien harjoitusten myötä.

Ohjeita sisentämiseen
Sisennys on pakko tehdä, muuten ohjelmat eivät toimi.
Jos koodia ei ole sisennetty ja nimenomaan sisennetty oikein,
ei Python osaa tulkata lohkoon kuuluvia komentoja.
Sisennys korvaa aaltosulut, joita esim C-kieli käyttää sisennyksen sijasta.

Thonny hoitaa sisennyksen automaattisesti kuten kaikki kunnon IDE-tekstieditorit.
Ongelmia syntyy siitä, että kaikki editorit eivät käsittele tabulointia samalla tavalla.
Siksi älä käytä välilyöntien ja tabulaattorin sekoitusta sisennysten hallintaan.
Pelkän tabulaattorin käyttö voi tuottaa ongelmia jos/kun myöhemmin käytämme
muita editoreita saman koodin käsittelyyn.
Jos kuitenkin, niin suositus: yksi tabulaattorimerkki = neljä välilyöntiä.

Sisennyksellä saadaan koodi toimimaan ja lähes yhtä tärkeää on se,
että samalla pyritään selkeyttämään koodin ulkonäköä.
Vielä yksi näkökulma, opetuksellinen,
ohjelmoija pakotetaan toteuttamaan koodi havainnollisella ja loogisesti jäsennellyllä tavalla.

Jos siirryt C/C++ koodista Pythoniin, sisennys vaikuttaa aluksi hankalalta.
Mutta pian siihen tottuu.
Sanoo nimimerkki ”senkin kokenut”.

Lisää opittavaa
Koodi joka on kirjoitettu ilman välejä, tyhjiä rivejä, ei ole ”ilmavaa” ja
siksi eri toiminnot ovat vaikeasti hahmotettavia ja kokonaisuus on varsin ahdistavaa luettavaa.
Siksi sovitaan, että erottelemme loogiset kokonaisuudet, esim lohkot, rivinvaihdoin (tyhjä rivi).

 

Monta if-lausetta
if-lauseita voi olla tarvittaessa enemmän kuin yksi.

Huomasitko
- ehtoja voi yhdistellä sanoilla and ja or.
“Jos ika on alle 60 ja jos ika on yli 11, seuraa jotain”.

Tärkeää:
muista aina että if- ja else-lauseita seuraa kaksoispiste ja siitä alkaa lohko sisennyksineen.

 

If-else-lause
If-lauseessa voi olla myös valinnainen else-osa:

If-else-rakenne.

Jos sulkujen sisällä oleva ehto on tosi, true, suoritetaan lause_1.
Jos ehto ei ole tosi, vaan on epätosi, false, suoritetaan lause_2.
If-lausetta voi jatkaa niin pitkälle kuin tarpeellista lisäämällä uusia if-lauseita else-osan perään.

Jos if-käskyn ehto on tosi, silloin muodostetaan lohko.
Lohkon tekemisessä tarvitaan sisennystä.
Kaikki käskyt, jotka on sisennetty sisemmälle tasolle kuin if-käskyn ehdon sisältävä rivi,
katsotaan kuuluvaksi samaan if-käskyyn aina niitä seuraavaan sisentämättömään riviin saakka.

Jos valinnan ehto ei ole totta vaan on epätotta, false,
suoritetaan toinen vaihtoehtoinen lohko koodia, käskysana elsen avulla.

 

If-else-mallikoodi

if-käskyn ei ole pakko sisältää else-osaa.
Jos else-osa puuttuu, if-rakenteeseen kuuluva käsky suoritetaan vain, jos ehto on tosi.
Jos ehto on epätosi, siirrytään suoraan ohjelman seuraavaan käskyyn.

 

elif-lause
Sana elif on kuten else, mutta lisäehdolla.
Se on lyhenne sanoista else if ja se asetetaan if-ehdon jälkeen. Tottakai, elif ehtoja voi olla useita.
Rakenteessa tutkitaan ensin, onko ehto1 tosi.
Jos se on, suoritetaan käsky1, eikä muita ehtoja tutkita lainkaan.
Jos taas ehto1 on epätosi, siirrytään tutkimaan järjestyksessä seuraavien ehtojen totuusarvoja,
kunnes löydetään ensimmäinen tosi ehto ja suoritetaan sitä vastaava käsky.
Jos mikään käskyistä ei ole tosi, suoritetaan else-kohdassa oleva käsky.
Else-kohta voi myös puuttua, jolloin ei suoriteta mitään käskyä, jos mikään ehdoista ei ole tosi.

Vain ensimmäinen ehdot täyttävä osio suoritetaan, loput jätetään huomiotta.
Ehtolauseessa voi olla (tai olla olematta) rajaton määrä elif-osia ja yksi else-osa.

Ohjelmassa on siis useita ehtoja, joista vain yksi kerrallaan voi olla tosi.
Tällöin ohjelman voi toki kirjoittaa käyttämällä monta sisäkkäistä if-käskyä,
mutta huomattavasti selvemmän ohjelman saa aikaiseksi käyttämällä if - elif - else -rakennetta.

Rakenteen yleinen muoto on seuraava:
if ehto1:
     käsky1
elif ehto2:
     käsky2
elif ehto3:
     käsky3
# lisää elif-kohtia ja niihin liittyviä käskyjä
else:
     käskyN

Ehdon voi kääntää sanalla not
if not luku > 10:

Yhtäsuuruus ja if-lause

Mallikoodissa tulostetaan vain se lause joka on tosi, true, muista hypätään ohi.
Tämän harjoituksen pointti on yhtäsuuruus eli ==.
Ekalla käskyrivillä testataan onko arvo- ja luku-muuttujat yhtäsuuria.
Tässä esimerkissä on vain yksi käsky (print-lause), joka suoritetaan, jos if-käskyn ehto on tosi.
Esimerkki on siitä huono, että ohjelma loppuu jos arvasit väärin.
Tehdään while-loopin yhteydessä sellainen tästä mallista, että arvaus jatkuu kunnes oikea tulos löytyy.
Mutta tämä onkin vain mallikoodi.

Muista Pythonissa:
sijoitusoperaattori on =
yhtäsuuruusoperaattori on ==

Kahden desimaaliluvun yhtäsuuruutta ei yleensä kannata tutkia, koska pyöristysvirheet voivat aiheuttaa yllätyksiä.

 

Paluu pääsivulle:

 

 

Jaa somessa:
Punomo Logo

Kirjaudu Punomoon

Ei vielä Punomo tiliä? Rekisteröidy alla

Punomo Logo

Anna palautetta

Käyttäjiemme palaute auttaa Punomon kehittämisessä. Anna palautetta alla.