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.
Tingimuslaused tagastavad meile alati ainult jah või ei, ehk programmi enda jaoks saab ta vaste True või False.
vanus = 25 if vanus >= 18: # See lause kontrollib, kas inimene on 18 või vanem 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 Pyhoni 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 arvutustehe on korrektne 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!")
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 moodustava 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. Sellisel juhul on võimalik kasutada tingimuses käsklust pass
.
Näiteks kui me ei ole veel otsustand, 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")