< eelmine | 2. nädala sisukord | järgmine > |
2.1 Tingimuslause
SISSEJUHATUS
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 selliseks 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".
Tihti aga on tegevused nii selleks juhuks, kui tingimus on täidetud, kui ka selleks, kui tingimus pole täidetud.
Programmides realiseeritakse selliseid valikuid tingimuslausete (ehk valikulausete ehk if-lausete) abil.
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! Enesehävitusrežiim aktiveeritud: 3 ... 2 ... 1 ....”.
Programmi alguses tuleb kasutajalt PIN-kood küsida, seda saab teha järgmise lausega:
sisestatud_pin = input("Sisesta PIN-kood: ")
Kui kasutada programmeerimiskeskkonda Thonny, siis ootab input
kasutaja sisestust alumisel paneelil (Shell).
Nüüd on vaja kontrollida, kas parool on õige või ei ole. Selleks saab kasutada tingimuslauset:
if sisestatud_pin == "1234": print("Sisenesid pangaautomaati!")
Mis see tingimuslause (ka valikulause või if-lause) siis on? Tingimuslauses 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. Kõige sagedamini on tingimus esitatud teatud võrdlemisena. Võrrelda võib näiteks muutuja väärtust ja sõnet nagu eelnevas näites. Oluline on tähele panna, et muutuja väärtus on samuti sõnetüüpi. Topeltvõrdusmärgiga (==
) avaldis on väärtusega True
, kui mõlemad pooled on võrdsed, ja väärtusega False
, kui ei ole võrdsed.
Võrrelda saab ka näiteks 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 ka lihtsalt True
(või False
), aga siis ei toimu tegelikult mingit valikut. Avaldis 5 == 4
on ka näiteks alati väär. Tingimuslausel on sisuline mõte siis, kui tingimusavaldis võib omandada erinevaid tõeväärtusi.
Kindlasti ei tohi unustada koolonit (:
) if
-rea lõpust. Paneme tähele, et print
on taandatud võrreldes eelmise reaga paremale. Seda saab teha kas vajutades TAB-klahvi või 4 korda tühikut. Selliselt tuleb käituda, et print
käsk käiks ikkagi if
-osa juurde ja sellist tegevust nimetatakse treppimiseks. Head programmeerimiskeskkonnad (näiteks Thonny) toetavad treppimist sellega, et pärast eelmise rea koolonit viivad kursori juba sobivalt taandesse.
Ülaltoodud 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! Enesehävitusrežiim aktiveeritud: 3 ... 2 ... 1 ....")
Kokku sai siis selline kood:
sisestatud_pin = input("Sisesta PIN-kood: ") if sisestatud_pin == "1234": print("Sisenesid pangaautomaati!") else: print("Vale parool! Enesehävitusrežiim aktiveeritud: 3 ... 2 ... 1 ....")
Palun katsetage seda programmi Pythoniga. Kui eelnevas näites midagi segaseks jäi, siis vaadake kokkuvõtvat videot programmi koostamise kohta:
Antud programmi plokkskeem näeb välja selline:
Sellist ühes või teises suunas otsuste tegemist ja liikumist vastavalt tingimuse kontrollile nimetatakse programmeerimises ka 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:
Ülesanne
Meenutame, et materjalides on enesekontrolliülesanded, mille lahendamise tulemusi ei salvestata. Võite julgesti ka valesti vastata, aga püüdke ikka õigesti.
NB! 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 nad siiski võrdseks lugeda. Näiteks saab sisendi puhul kõik tähed väikeseks teisendada nii:
sisestatud_väike = input().lower()
Analoogiliselt saab kõik tähed suureks teisendada:
sisestatud_suur = input().upper()
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. Loomulik on aga paljusid asju käsitleda ka arvuna.
Tingimusi saab (muuhulgas) moodustada järgmiste märkidega:
<
,>
,<=
,>=
võrratuste kehtivuse kontrollimiseks;==
võrdsuse kontrollimiseks;!=
mittevõrdsuse kontrollimiseks.
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())
.
print("Kui vana oled?") vanus = int(input()) if vanus < 14: print("Oled natukene noor edasipääsuks.") else: print("Sisenesid võlumaailma.")
Ülesanne
Ülesandeid huvilisematele
Siin on nüüd mõned ülesanded, mille võivad need, kes end ebakindlamalt tunnevad, vahele jätta. Kuid soovitame soojalt siiski proovida!
- Kirjutada 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". - Katsetada, kas ka sõnesid saab võrrelda märkide
<
,<=
,>=
ja>
abil. Kuidas tulemust kommenteerida?
< eelmine | 2. nädala sisukord | järgmine > |