Tingimuslause
Tihti tuleb programmides teha valik, kas jätkata üht- või teistmoodi. Python võimaldab programmeerijal taolised valikud kirja panna tingimuslause ehk valikulause ehk if-lause abil.
Tingimuslause ehk if-lause päises olev tingimus on avaldis, mille väärtus on kas True või False ehk jah või ei. Näiteks järgnevas programminäites väljastastatakse ekraanile vastavalt kas True või False vastavalt sisestatud vanusele:
vanus = int(input("Sisesta vanus:"))
print(vanus >= 18)
Tingimuslause kirjutamiseks tuleb lisada if-osa, kus kontrollitakse, kas vanus on 18 aastat või rohkem. Sellisel juhul teavitatakse: "Oled piisavalt vana, et autoga sõita!".
vanus = int(input("Sisesta vanus:"))
if vanus >= 18: # See tingimus kontrollib, kas inimene on 18 aastane või vanem
print("Oled piisavalt vana, et autoga sõita!")
Mis saab aga siis, kui vanus on alla 18 aasta? Selle saame määrata else-osas järgnevalt:
vanus = int(input("Sisesta vanus:"))
if vanus >= 18:
print("Oled piisavalt vana, et autoga sõita!")
else: #See viiakse ellu kui if-lause tingimus ei vastanud tõele
print("Pead veel ootama!")
Antud näites on mõlemas tingimuslause harus vaid üks käsk, aga neid võib seal olla ka rohkem.
Tingimuslause komponendid on:
- päis ehk tingimus, mis käib if-lause juurde,
- jah-haru, mis viiakse täide kui päis vastab tõele ja tagastab True (paremale nihutatud),
- else,
- else-haru, mis viiakse ellu kui päis ei vasta tõele ja tagastab False (paremale nihutatud).
Tingimusi saab (muuhulgas) moodustada järgmiste operaatoritega:
- <, >, <=, >= sobivad arvude võrdlemiseks;
- topeltvõrdusmärk (==) tähistab võrdsust nii arvude kui ka sõnede puhul;
- != tähistab mittevõrdsust nii arvude kui ka sõnede puhul.
Märkus! Ära unusta, et üksikut võrdusmärki (=) kasutatakse Pythonis muutujale väärtuse omistamiseks, seetõttu on võrdsuse kontrollimiseks ette nähtud topeltvõrdusmärk (==).
Treppimine
if-lause kasutamisel tuleb arvesse võtta Pythoni süntaksit, ehk rõhku tuleb panna tühikutega joondamisele ehk treppimisele, sest vastasel juhul loeb arvuti koodi valesti või ei suuda seda üldse lugeda. Nii saab ära määrata, mis käsud kuuluvad tingimuslausete juurde.
arv = int(input("Mis on su lemmiknumber? "))
if arv % 2 == 0: # Kontrollib, kas arv jagub kahega ehk kas on paarisarv
print("Sinu lemmiknumber jagub 2-ga!")
print("Tegu on paarisarvuga!")
else:
print("Sinu lemmiknumber ei jagu 2-ga!")
print("Tegu on paaritu arvuga!")
print("Head aega!")
Pane tähele, et %-märk tähistab jagamisel tekkivat jääki.
Näites kuuluvad tingimuslause jah-harusse laused print("Sinu lemmiknumber jagub 2-ga!") ja print("Tegu on paarisarvuga!") ning else-harusse laused print("Sinu lemmiknumber ei jagu 2-ga!") ja print("Tegu on paaritu arvuga!").
Mis väljastatakse sisendi 14 korral?
Programmi viimane rida ei ole trepitud ja selle pärast ei kuulu ta tingimuslause juurde, vaid kutsutakse välja igal juhul. Mis juhtuks kui viimase rea ette panna 4 tühikut?
Hiljem tuleb välja, et treppimise oskust on vaja ka paljudes muudes Pythoni konstruktsioonides. Põhimõte on, et sama kaugele joondatud read moodustavad mingi ploki ehk terviku. Plokke võib tekkida palju erinevaid.
NB! Trepitud plokile eelnev rida lõpeb alati kooloniga (see on Pythonile lisakinnituseks, et programmeerija soovib järgmisel real alustada trepitud plokki). Katsetus Proovi järele, kuidas Python käitub, kui unustad kasutada koolonit või jätad ära mõne taandrea. Sellega saad end taoliseks situatsiooniks juba ette valmistada. Märkus Kuigi Python on treppimise osas võrdlemisi paindlik, tuleks segaduste vältimiseks alati kasutada joondamiseks 4 tühikut. Thonnys kirjutades võib treppimiseks vajutada ka TAB klahvi – keskkond genereerib sellepeale TAB sümboli asemel 4 tühikut. Tegelikult pole enamasti vaja isegi TAB klahvi kasutada – kui vajutada kooloniga lõppeval real uue rea saamiseks ENTER-it, taipab redaktor ise, et järgmine rida tuleb treppida ja lisab uue rea algusesse vajaliku arvu tühikuid. Ka järgmistele ridadele pannakse usinalt tühikud ette. Andmaks märku, et uus rida enam tingimuse alla ei kuulu, tuleb need tühikud ära kustutada ja alustada käsu kirjutamist jälle ekraani vasakust servast.
Video sisendis kasutajalt ja väljundist ekraanile
Tingimuslause video
Mitmeharuline tingimuslause
Vahepeal võib programmeerides ette tulla olukordi, kus meil on vaja kontrollida mitmeid erinevaid tingimusi. Selle jaoks ei ole enam mõttekas kirjutada mitut erinevat if-lauset, sest see võtaks rohkem aega ja muudaks koodi segasemaks.
Oletame, et kuulus korvpallur tahab ära anda enda pusa, mille suurus on M. Ta tahab kindel olla, et loosis saaksid osaleda ainult inimesed, kellele see pusa paras on. Ta loob kiiresti sellise programmi
minu_suurus = input("Mis suuruses pusasid sa kannad (L,M,S)? ")
if minu_suurus == "L":
print("Pusa on sulle liiga väike!")
else:
if minu_suurus == "M":
print("Pusa on sulle paras!")
else:
if minu_suurus == "S":
print("Pusa on sulle liiga suur!")
else:
print("Sellist suurust pole!")
Selline kirjapilt võib aga minna trepina liiga paremale, kui tekib vajadus palju asju kontrollida. Selle jaoks on loodud Pythonisse elif, mis on olemuse poolest kombinatsioon else-st ja if-ist. Sellise koodi saaks kirjutada hoopis kergemalt.
minu_suurus = input("Mis suuruses pusasid sa kannad (L,M,S)? ")
if minu_suurus == "L":
print("Pusa on sulle liiga väike!")
elif minu_suurus == "M":
print("Pusa on sulle paras!")
elif minu_suurus == "S":
print("Pusa on sulle liiga suur!")
else:
print("Sellist suurust pole!")
Mis siis saab, kui kasutaja sisestab särgisuuruseks hoopis väikese tähe "s"? Sellisel juhul on abiks sõnede töötlemise funktsioonid nagu lower() või upper(). Näiteks saaks eelneva näite puhul tähed võrdluseks alati suureks teha, et tingimus loeks õigeks nii suure tähe "S" kui ka väikese tähe "s":
minu_suurus = input("Mis suuruses pusasid sa kannad (L,M,S)? ")
if minu_suurus.upper() == "L":
print("Pusa on sulle liiga väike!")
elif minu_suurus.upper() == "M":
print("Pusa on sulle paras!")
elif minu_suurus.upper() == "S":
print("Pusa on sulle liiga suur!")
else:
print("Sellist suurust pole!")
Käsklus pass
Vahel on soov programmi katsetada enne, kui tegevused harudes on paika pandud. Tühi plokk on Pythonis süntaksiviga, seega sellisel juhul on võimalik kasutada tingimuses käsklust pass.
Näiteks kui me ei ole veel otsustanud, mida teha suuruse XL puhul:
minu_suurus = input("Mis suuruses pusasid sa kannad (L,M,S)? ")
if minu_suurus.upper() == "XL":
pass
elif minu_suurus.upper() == "L":
print("Pusa on sulle liiga väike!")
elif minu_suurus.upper() == "M":
print("Pusa on sulle paras!")
elif minu_suurus.upper() == "S":
print("Pusa on sulle liiga suur!")
else:
print("Sellist suurust pole!")