Kuidas kirjutada tingimuslikke harusid if avaldustega Pythonis

Äri

Selgitage tingimuslike hargnemiste kasutamist if-avaldustega Pythonis.

  • If avalduste põhitõed (if, elif, else)
  • Määrake tingimused võrdlusoperaatoritega jne.
  • Täpsustage tingimused numbri, nimekirja jne järgi.
  • Mitme tingimuse või eituse määramine loogiliste operaatoritega (ja, või, mitte)
  • Tingimusavaldused uutel ridadel ja mitmel real

Samuti on olemas ternaarne operaator, mis kirjeldab tingimuslikku hargnemist ühes reas. Vt järgmist artiklit.

If avalduste põhitõed (if, elif, else)

If-avalduse põhiline vorm on järgmine

if Conditional expression 1:
    `Processing to be performed if Expression 1 is True.`
elif Conditional expression 2:
    `Processing to be performed when expression 1 is false and expression 2 is true.`
elif Expression 3:
    `Process when expression 1 and 2 are false and expression 3 is true.`
...
else:
    `Processing when all conditionals are false.`

“elif” vastab “else if”-ile C-s ja teistes keeltes ning “elifs” võib olla suvaline arv.

Kui on ainult üks tingimusavaldis või töötlemine, kui false ei ole vajalik, võib plokid “elif” ja “else” ära jätta.

Määrake tingimused võrdlusoperaatoritega jne.

Määrake tingimus operatsiooniga, mis tagastab bool-tüüpi (true, false), näiteks võrdlusoperaatoriga.

Pythoni võrdlusoperaatorid on järgmised

operaatortulemus
x < ytrue, kui x on väiksem kui y
x <= ytrue, kui x on väiksem või võrdne y-ga
x > ytrue, kui x on suurem kui y
x >= ytrue, kui x on suurem või võrdne y-ga
x == ytrue, kui x ja y väärtused on võrdsed
x != ytrue, kui x ja y väärtused ei ole võrdsedx is ytrue, kui x ja y on sama objektx is not ytrue, kui x ja y ei ole sama objektx in ytrue, kui x sisaldub y-sx not in ytrue, kui x ei sisaldu y-s

Näide. Mugavuse huvides on see defineeritud funktsioonina koos def avaldusega.

def if_test(num):
    if num > 100:
        print('100 < num')
    elif num > 50:
        print('50 < num <= 100')
    elif num > 0:
        print('0 < num <= 50')
    elif num == 0:
        print('num == 0')
    else:
        print('num < 0')

if_test(1000)
# 100 < num

if_test(70)
# 50 < num <= 100

if_test(0)
# num == 0

if_test(-100)
# num < 0

Järgnevat saab kirjutada Pythonile omase viisiga. Vaata lähemalt järgmisest artiklist.
a < x < b

def if_test2(num):
    if 50 < num < 100:
        print('50 < num < 100')
    else:
        print('num <= 50 or num >= 100')

if_test2(70)
# 50 < num < 100

if_test2(0)
# num <= 50 or num >= 100
  • ==
  • !=

Ülaltoodud on väärtuste võrdlus; objektide identiteetide võrdlemiseks kasutage järgmist

  • is
  • is not

Näiteks täisarvu ja ujukomaarvu võrdlemisel tagastab “==” tõese väärtuse, kui väärtused on samaväärsed, kuid “is” tagastab vale väärtuse, sest tegemist on erinevate objektidega.

i = 10
print(type(i))
# <class 'int'>

f = 10.0
print(type(f))
# <class 'float'>

print(i == f)
# True

print(i is f)
# False

Samuti on võimalik teha tingimus, kas nimekiri või string sisaldab konkreetset elementi (märki).

  • in:lisada
  • not in:välja arvatud
def if_test_in(s):
    if 'a' in s:
        print('a is in string')
    else:
        print('a is NOT in string')

if_test_in('apple')
# a is in string

if_test_in('melon')
# a is NOT in string

Täpsustage tingimused numbri, nimekirja jne järgi.

If-lause tingimusavaldis võib olla arv, loend või muu objekt, mis ei ole tüübilt bool (true, false).

if 10:
    print('True')
# True

if [0, 1, 2]:
    print('True')
# True

Pythoni if-lause tingimusavalduses loetakse järgmised objektid valeks.

Nulli, tühjad stringid, loetelud jne loetakse valeks; kõik muud loetakse tõeseks.

Seda, kuidas objekti hinnatakse, saab kontrollida bool() abil.

print(bool(10))
# True

print(bool(0.0))
# False

print(bool([]))
# False

print(bool('False'))
# True

Seda saab kasutada näiteks lihtsalt protsessi kirjutamiseks, kui nimekiri on tühi.

def if_test_list(l):
    if l:
        print('list is NOT empty')
    else:
        print('list is empty')

if_test_list([0, 1, 2])
# list is NOT empty

if_test_list([])
# list is empty

Pange tähele, et string 'False' on samuti tõene, sest nagu ülaltoodud näites näidatud, on iga string, mis ei ole stringis tühi, tõene. Konkreetse stringi, näiteks 'True' või 'False' teisendamiseks 1,0-ks, kasutage mooduli distutils.util funktsiooni strtobool().

Mitme tingimuse või eituse määramine loogiliste operaatoritega (ja, või, mitte)

Loogilisi operaatoreid (ja, või, mitte) saab kasutada loogilise konjunktsiooni, loogilise disjunktsiooni ja mitme tingimuse eitamise käsitlemiseks.

operaator(Tulemus (if-lause tingimuslikus väljendis)
x and ytõene, kui nii x kui ka y on tõesed
x or ytõene, kui kas x või y on tõene
not xvale, kui x on tõene, tõene, kui x on vale
def if_test_and_not(num):
    if num >= 0 and not num % 2 == 0:
        print('num is positive odd')
    else:
        print('num is NOT positive odd')

if_test_and_not(5)
# num is positive odd

if_test_and_not(10)
# num is NOT positive odd

if_test_and_not(-10)
# num is NOT positive odd

Tegelikult ei anna “x ja y” ja “x või y” tagasi True või False, vaid kas x või y. Niikaua kui neid kasutatakse tingimuslausetes if-lauseis, ei ole vaja nende pärast muretseda, sest nad annavad kas True või False. Vaata lähemalt järgmisest artiklist.

Võimalik on kasutada ja ja või rohkem kui üks kord.

def if_test_and_not_or(num):
    if num >= 0 and not num % 2 == 0 or num == -10:
        print('num is positive odd or -10')
    else:
        print('num is NOT positive odd or -10')

if_test_and_not_or(5)
# num is positive odd or -10

if_test_and_not_or(10)
# num is NOT positive odd or -10

if_test_and_not_or(-10)
# num is positive odd or -10

Tingimusavaldused uutel ridadel ja mitmel real

Kui kasutatakse mitut tingimusavaldust, ühendades neid “ja” või “või” abil, ja iga rida muutub pikaks, on mõnikord vaja tingimusavaldust katkestada ja kirjutada see mitmele reale.

Ridevahetuse saab teha tagurpidi kaldkriipsu abil või kogu rea sulgudes.

def if_test_and_backslash(num):
    if num >= 0 \
       and not num % 2 == 0:
        print('num is positive odd')
    else:
        print('num is NOT positive odd')

if_test_and_backslash(5)
# num is positive odd

def if_test_and_brackets(num):
    if (num >= 0
        and not num % 2 == 0):
        print('num is positive odd')
    else:
        print('num is NOT positive odd')

if_test_and_brackets(5)
# num is positive odd

Rida katkestamiseks võite kasutada tagurpidi kaldkriipsu nii mitu korda, kui soovite. Samamoodi võite ridu sulgudes katkestada suvalisel arvul kordi. Piirangut taandamisel ei ole.

Pange tähele, et seda tehnikat saab kasutada kõikjal Pythoni koodis, mitte ainult if-avaldustes.