Materjalid koostas ja kursuse viib läbi
Tartu Ülikooli arvutiteaduse instituudi programmeerimise õpetamise töörühm
< eelmine | 3. OSA sisukord | järgmine > |
3.1 Valikulause. Sõnede ja arvude võrdlemine
SISSEJUHATUS
Elus tuleb teha mitmeid valikuid.
Allikas: https://unsplash.com/photos/y4bE8ST_CTg
Näiteks tuleb abielutseremoonial valida kahe valiku vahel - kas “jah” või “ei”.
Selles osas vaatame, kuidas valikulausete (ehk tingimuslausete ehk if-lausete) abil valikuid Pythonis realiseeritakse.
SÕNEDE VÕRDLEMINE VALIKULAUSES
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:
print("Sisesta PIN-kood:")
Nüüd on aga vaja kasutaja sisestus kätte saada ja seejärel seda kasutada. Kättesaamiseks on sobiv funktsioon input()
. Selleks, et koodiga saaks hiljem midagi peale hakata, asetame selle muutujasse sisestatud_pin
. Kui kasutada programmeerimiskeskkonda Thonny, siis ootab input
kasutaja sisestust alumises aknas (Shell).
sisestatud_pin = input()
Tegelikult saaks nende kahe rea asemel ka ühte kasutada, sest funktsioonile input
võib väljastatava teksti argumendina ette anda.
sisestatud_pin = input("Sisesta PIN-kood:")
Nüüd jääb üle vaid kontrollida, kas parool on õige või ei ole. Selleks saab kasutada valikulauset:
if sisestatud_pin == "1234": print("Sisenesid pangaautomaati!")
Mis see valikulause (ka tingimuslause või if-lause) siis on? Valikulauses 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õne 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. Valikulausel 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. 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.
Valikulausel 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:
print("Sisesta PIN-kood:") sisestatud_pin = input() 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:
https://www.youtube.com/watch?v=VHsGkNtEGxk
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, kuid 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äsitledagi ikka 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 | 3. OSA sisukord | järgmine > |