Tingimuslause

Tingimus- ehk valikulaused võimaldavad etteantud tingimuse alusel programmikoodi üht või mitu rida (koodi plokki) valikuliselt täita. Tingimuslause sisu/loogikat aitab tajuda järgmine reaaleluline lausend: kui vihma sajab, siis võta vihmavari kaasa. Programmeerimises on tingimuseks loogikaavaldis. Lihtsaimad loogikaavaldised on tõeväärtused (True või False) ja (kahe operandiga) võrdlused (nt a > b või c == d). Tingimuslausete esitamisel kasutatakse kindlat tekstilist struktuuri ehk süntaksit, mis algab tüüpiliselt võtmesõnaga if.

Tingimuslaused on tihedalt seotud tõeväärtuste ja loogikatehetega. Sellepärast on soovitatav enne tingimuslausetega tutvumist lugeda peatükki Tõeväärtused ja loogikatehted. Vaata ka alljärgnevat ülevaatlikku videot tingimuslausetest.

Tingimused

Loogikaavaldis on tingimuslause tingimus ehk condition. True ja False abil saab juhtida tingimuslauseid.

Koodiplokk

Tingimuslauses kasutatakse koolonit ja kogu sisu peale tingimust on eristatud taandega. PyCharm ja teised IDE-d lisavad taanded automaatselt, kuid käsitsi saab taanet lisada Tab abil ja seda eemaldada Shift+Tab, kui kursor on rea alguses.

Taane on osa Pythoni süntaksist ja seda ei tohi ära jätta. Kogu koodist ei pea siin aru saama, kuid eesmärk on jälgida taanet. Võtmesõnu if-elif-else tutvustatakse allpool.

number = 4
if number < 10:  # The if statement is executed because 4 is smaller than 10.
    print("The number is too small, it should be increased.")
    if number < 5:  # The if statement is executed because 4 is smaller than 5.
        number += 2  # number = number + 2
        print("The number was increased by two.")
    else:
        number += 1
        print("The number was increased by one")
else:
    print("The number is big enough.")
print(f"The number is {number} now.")

# Output:
# The number is too small, it should be increased.
# The number was increased by two.
# The number is 6 now.

Võtmesõna if

Kõige lihtsam tingimuslause on moodustatud if tingimusest. Koodiplokk käivitub siis, kui if tingimuses on tõeväärtus True. Kui tõeväärtuseks tuleb False, siis jääb koodiplokk vahele.

Koodiplokk käivitub, sest tingimus on True.

# no pec # You can also edit the code name = "Alice" if name == "Alice": # The if statement is executed because (variable) name equals to "Alice". print("Hi", name) # --> "Hi Alice"

Koodiplokk ei käivitu, sest tingimus on False.

# no pec animal = "cat" if animal == "zebra": # The if statement is not executed because (variable) animal does not equal to "zebra". print("Hello")

if voodiagrammina:

../_images/if_flowchart.png

Võtmesõna else

Võtmesõna else on valikuline tingimus, mis lisatakse if järele ja sellele järgnev plokk käivitatakse vaid siis, kui if ja kõik järgnevad (kui on) elif tingimuslausete tõeväärtused on False.

name = "Tim"
if name == "Tim":  # The if statement is executed because the condition is True.
    print("Hello", name)
else:
    print("Hello, Stranger")

# Output:
# Hello Tim
# no pec age = 62 if age < 20: # Condition is False. print("You are too young.") elif 20 <= age <= 60: # Condition is False. print("You may proceed.") else: # The else statement is executed because previous conditions were False. print("You are too old.") # Output: # You are too old.

Võtmesõna elif

Kui soovitakse, et üks mitmest tingimustest käivituks, siis on selleks sobiv kasutatada võtmesõna elif. See on lühike vorm koodist else: if. Kui if ei käivitu, siis kontrollitakse järgmist elif tingimust ja nii kuni üks neist on True. Käivituda saab ainult üks plokk.

number = 2
if number > 3:
    print("The number is larger than 3")
elif number <= 3:  # The elif statement is executed.
    print("The number is smaller or equal to 3")

# Output:
# The number is smaller or equal to 3

Kui üks tingimustest on True, siis edasi ei vaadata.

number = 2
if number > 3:
    print("The number is larger than 3")
elif number <= 3:
    print("The number is smaller or equal to 3")
elif number == 2:
    print("The number is 2")
elif number >= 0:
    print("The number is positive")

# Output:
# The number is smaller or equal to 3

Võrdluseks: kasutades ainult if tingimusi.

number = 2
if number > 3:
    print("The number is larger than 3")
if number <= 3:
    print("The number is smaller or equal to 3")
if number == 2:
    print("The number is 2")
if number >= 0:
    print("The number is positive")

# Output:
# The number is larger than 3
# The number is 2
# The number is positive

if-elif-else

Võtmesõna pass on vajalik, kui süntaks nõuab käsku, kuid sisu on tühi.

condition_0, condition_1, condition_2 = False, False, False

if condition_0:
    pass
    # Executed if condition_0 is True.
elif condition_1:
    pass
    # Executed if condition_0 is False and condition_1 is True.
elif condition_2:
    pass
    # Executed if condition_0 is False and condition_1 is False and condition_2 is True.
else:
    pass
    # Executed if all previous statements are False.

Stiil

Tihti annab tingimuslauseid lihtustada. Parandame ühe lihtsa funktsiooni (Funktsiooni mõiste ja kasutamine) stiili.

def is_even(n):
    even = (n % 2 == 0)
    if even == True:
        return True
    else:
        return False

Kõigepealt võib lihtsutada avaldist even == True. Piisab kui kirjutada lihtsalt even, sest muidu me kontrollime True == True või False == True ehk tulemus sõltubki even tõeväärtusest.

def is_even(n):
    even = (n % 2 == 0)
    if even:
        return True
    else:
        return False

Kui natuke mõelda, siis saab alljärgnevat tingimust funktsioonides tagastamisel lihtsustada.

if (condition):
    return True
else:
    return False

# Return value correlates with condition value, so we can simplify:
return condition

Meie näite puhul siis:

def is_even(n):
    even = (n % 2 == 0)
    return even

Lisame ka korraliku Docstringi ja muutuja even ei anna meile hetkel palju juurde, seega võib selle eemaldada.

def is_even(n):
    """
    Checks if the number is even.
    :param n: number to check
    :return: True if even, else False
    """
    return n % 2 == 0

Saime esialgsega võrreldes palju puhtama ja loetavama koodi.

"Tühi" ja "mittetühi" objekt

Tip

Pythonis on kõik "tühi" tõeväärtusega False ja "mittetühi" True.

if ehk bool kontekstis on Pythonis False väärtusega:

  • False

  • None

  • tühjad sõned - '' and ""

  • tühjad konteinerid - tühi list, tühi dict, tühi tuple, jne

  • numbrilised väärtused, mis on võrdsed nulliga - 0, 0.0, -0.0

  • pythoni objektid, mis implementeerivad __bool__ tagastama False või 0

  • pythoni objektid, mis ei implementeeri __bool__, kuid __len__ tagastab 0

Kõike muud peetakse pythonis if juures True-ks.

if not []:  # [] -> False
    print("List is empty.")

if [1, 2, 3]:  # [1, 2, 3] -> True
    print("List has elements.")
>>> bool({})
False
>>> bool({"a": 2})
True
>>> bool(1,)
True
>>> bool(())
False
>>> bool('')
False

Alljärgnevat on hea teada, kuid sellise koodi kirjutamine võib vähendada koodi loetavust.

# python

if 100:
    print("True")

if not 0:
    print("True")

# Output:
# True
# True
>>> bool(0)
False
>>> bool(0.0)
False
>>> bool(-0.0)
False
>>> bool(1)
True
>>> bool(555)
True

Tingimuslause ühel real

Pythonis on olemas ternary operator ehk tingimuslauseid on võimalik kirjutada ühele reale.

>>> 'true' if True else 'false'
'true'
>>> 'true' if False else 'false'
'false'

Esimeses näites on tingimuslause kirjutatud ühele reale ja teises näites mitmele reale:

# <value_when_true> if <condition> else <value_when_false>

fruit = 'Melon'
is_melon = True if fruit == 'Melon' else False

print(is_melon)  # --> True

vs

fruit = 'Melon'
is_melon = False
if fruit == 'Melon':
    is_melon = True

print(is_melon)  # --> True

Tingimuslause tingimuslause sees

Tingimuslauseid võib olla ka teise tingimuslause sees.

# no pec number = 8 if number > 5: print("The number is larger than 5") if number > 10: print("The number is larger than 10") else: print("The number is smaller than 10") if number == 8: print("The number is 8") # Output: # The number is larger than 5 # The number is smaller than 10 # The number is 8

Näited

Tingimuslausetega koodijupp, mis prindib konsooli infot sisestatud numbri kohta.

number = float(input("Enter a number: "))

if number >= 0:
    if number == 0:
        print("The number is zero.")
    else:
        print("The number is positive.")
    else:
        print("The number is negative.")

Tingimuslausetega funktsioon (Funktsiooni mõiste ja kasutamine), mis esitab kuu sõnena.

def month(n):
    """
    Returns the n-th month of the year as a string
    :param n: month number
    :return: month as string
    """
    if n == 1:
        return "January"
    elif n == 2:
        return "February"
    elif n == 3:
        return "March"
    elif n == 4:
        return "April"
    elif n == 5:
        return "May"
    elif n == 6:
        return "June"
    elif n == 7:
        return "July"
    elif n == 8:
        return "August"
    elif n == 9:
        return "September"
    elif n == 10:
        return "October"
    elif n == 11:
        return "November"
    elif n == 12:
        return "December"
    else:
        return "Incorrect month number."


print(month(8))  # --> August
print(month(12))  # --> December
print(month(0))  # --> Incorrect month number.

Lisalugemist