7 Tingimuslause

Eelmisel nädalal vaatasime algoritme, kus mitmes kohas olenes järgmine samm teatud tingimuse täidetusest. Näiteks õnnetuse puhul: “Kui kannatanu ei hinga, tee kunstlikku hingamist.” Sellisel juhul on kirjeldatud tegevus juhuks, kui tingimus on täidetud ja kui pole täidetud, siis jäetakse see samm lihtsalt vahele. Siinkohal on veel huvitav see, et tingimus on eituse kaudu esitatud – “kannatanu ei hinga”.

Joonis 1. Tingimus ja tegevus

Tihti on määratud tegevused mõlemal juhul: tingimuse kehtides sooritatakse üks tegevus, vastasel juhul teine tegevus.

Joonis 2. Tingimus ja erinevad tegevused

Programmides realiseeritakse selliseid valikuid tingimuslausete (ehk valikulausete ehk if-lausete) abil.

Tingimuslause

Tahame näiteks teha programmi, mis küsib kasutajalt sisenemiseks PIN-koodi ja kontrollib selle õigsust. Programm võiks

  • õige parooli sisestamisel öelda: “Sisenesid pangaautomaati!”
  • vale parooli sisestamisel aga hoopis: “Vale parool! Ligipääs keelatud!”.

Programmi alguses tuleb kasutajalt PIN-kood küsida, seda saab teha järgmise lausega:

sisestatud_pin = input("Sisesta PIN-kood: ")

Nüüd on vaja kontrollida, kas parool on õige või ei ole. Selleks saab kasutada tingimuslauset:

if sisestatud_pin == "1234":
    print("Sisenesid pangaautomaati!")

Tingimuslauses (ka valikulause või if-lause) on kesksel kohal tingimus, mille alusel otsustatakse, kuidas programm edasi töötab. Tingimus on esitatud tõeväärtuse tüüpi avaldisena, mille väärtus on tõene (True) või väär (False) – tingimus on täidetud või ei ole täidetud.

Tingimusi saab (muuhulgas) moodustada järgmiste märkidega:

  • <, >, <=, >= võrratuste kehtivuse kontrollimiseks;
  • == võrdsuse kontrollimiseks;
  • != mittevõrdsuse kontrollimiseks.

Kõige sagedamini on tingimus esitatud teatud võrdlemisena. Võrrelda võib näiteks muutuja väärtust ja sõne väärtust (sisestatud_pin == "1234"). Oluline on tähele panna, et muutuja väärtus peaks siis olema samuti sõnetüüpi. Topeltvõrdusmärgiga (==) avaldis on väärtusega True, kui mõlemad pooled on võrdsed ja väärtusega False, kui need ei ole võrdsed.

Võrrelda saab ka arvulise muutuja väärtust ja arvu. Näiteks avaldis a >= 1 on tõene, kui a on suurem kui üks või ühega võrdne. Samuti võib võrrelda omavahel kahe muutuja väärtust.

Tegelikult võib tingimusena olla kirjas lihtsalt True (või False), aga siis ei toimu tegelikult mingit valikut. Näiteks avaldis 5 == 4 on alati väär ja samaväärne False kirjutamisega. Tingimuslausel on sisuline mõte siis, kui tingimusavaldis võib omandada erinevaid tõeväärtusi.

Treppimine (ridade taane)

Kindlasti ei tohi unustada koolonit (:) if-rea lõpust. Paneme tähele, et print on taandatud võrreldes eelmise reaga paremale. Selleks tuleb vajutada ühe korra TAB-klahvi või 4 korda tühikut. Sellega määrame, et print käsk täidetaks if-tingimusest sõltuvalt. Sellist tegevust nimetatakse treppimiseks. Head programmeerimiskeskkonnad (näiteks Thonny) toetavad treppimist sellega, et pärast eelmise rea koolonit viivad kursori juba sobivalt taandesse.

else-konstruktsioon

Meie loodav programm juba kuidagi töötab, aga mitte siis, kui parool on vale. Tingimuslausel võib olla else-osa, millega määratakse, mis juhtub siis, kui tingimus ei ole täidetud (vastava avaldise väärtus on False).

Hetkel lisame järgmise lõigu:

else:
    print("Vale parool! Ligipääs keelatud!")

Kõik read kokku panduna saame järgmise koodi:

Näiteprogramm. if-lausega Pangaautomaat

sisestatud_pin = input("Sisesta PIN-kood: ")
if sisestatud_pin == "1234":
    print("Sisenesid pangaautomaati!")
else:
    print("Vale parool! Ligipääs keelatud!")

Käivita programm ka ise.

Videomaterjal

Vaata ka programmi loomise videot.

Hargnemine

Pangaautomaadi programmi plokkskeem näeb välja selline:

Joonis 3. Pangaautomaadi plokkskeem

Sellist ühes või teises suunas otsuse tegemist ja liikumist vastavalt tingimuse kontrollile nimetatakse programmeerimises hargnemiseks. Programm otsustab, millist haru pidi edasi minna: kui tingimus on täidetud, siis minnakse edasi ühte haru pidi, kui ei ole, siis teist haru pidi. Rõhutada tuleb, et tingimuslauses on harusid alati kaks, isegi kui else-osa “näha” pole. Kui else puudub, siis ei tehta väära tingimusavaldise korral mitte midagi (sama hästi võiks else-osa kirjutada ja tühjaks jätta).

Kui eelnevas programmis else-osa poleks, siis plokkskeem oleks selline:

Joonis 4. Pangaautomaadi plokkskeem ilma else-haruta

Enesekontroll (1 ülesanne)

Meenutame, et enesekontrolliülesannetes on lubatud karistamatult ka valesti vastata.

Sõnede võrdlemine

Sõnede võrdlemisel loetakse suurtähed ja väiketähed erinevateks. Näiteks "A" ja "a" ei ole võrdsed. Mõnede ülesannete puhul me tahame neid siiski võrdsetena kasutada. Selleks on lihtsaim viis kõik tähed kas suureks või väikseks teisendada. Näiteks saab sisendi puhul kõik tähed väikeseks teisendada:

sisestatud_väike = input().lower()

Sarnaselt saab kõik tähed suureks teisendada:

sisestatud_suur = input().upper()

Arvude võrdlemine

Eelmises näites kontrollisime koodi võrdsust sõnega "1234". Oluline on siinkohal just see, et jutumärgid teevad sellest muidu arvuna näivast asjast sõne. Tihti on meil tarvis võrrelda siiski arvulisi väärtusi.

Kasutame nüüd arvude võrdlemisel võrratust. Teeme programmi, mis küsib kasutajalt vanust ja kui ta on noorem kui 14, siis öeldakse, et ta on selle mängu mängimiseks liiga noor. Täisarvu sisestamiseks peame sisendiks saadud sõne täisarvuks teisendama. Seda saab teha funktsiooniga int (näiteks arv = int(input())):

Näiteprogramm. Vanuse kontrollimine

print("Kui vana oled?")
vanus = int(input())
 
if vanus < 14:
    print("Oled natukene noor edasipääsuks.")
else:
    print("Sisenesid võlumaailma.")

Enesekontroll (1 ülesanne)

Ülesandeid huvilistele

Siin on mõned ülesanded, mille võivad need, kes end ebakindlamalt tunnevad, vahele jätta. Soovitame soojalt siiski proovida!

  • Kirjuta PIN-koodi küsimise programm nii ümber, et sisestatud koodi võrreldakse arvuga 1234 (just arvuga, mitte sõnega). Programm võiks ka öelda, kas sisestatud vale kood oli “liiga suur” või “liiga väike”.
  • Katseta, kas ka sõnesid saab võrrelda märkide <, <=, >= ja > abil. Kuidas tulemust kommenteerida?

Litsents

Icon for the Creative Commons Attribution 4.0 International License

Programmeerimine on loodud Eno Tõnisson, Tauno Palts, Merilin Säde, Kaarel Tõnisson jt poolt Creative Commons Attribution 4.0 International License litsentsi alusel, kui pole teisiti märgitud.

Jaga seda raamatut