Kako napisati pogojne veje z izjavami if v Pythonu

Posel

Razložite pogojno razvejitev z ukazi if v Pythonu.

  • Osnove stavkov if (if, elif, else)
  • Določite pogoje s primerjalnimi operatorji itd.
  • Pogoje določite po številu, seznamu itd.
  • določanje več pogojev ali negacij z logičnimi operatorji (in, ali, ne)
  • Pogojni izrazi za nove vrstice in več vrstic

Na voljo je tudi trojni operator, ki v eni vrstici opiše pogojno vejo. Glej naslednji članek.

Osnove stavkov if (if, elif, else)

Osnovna oblika izjave if je naslednja

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” ustreza “else if” v jeziku C in drugih jezikih, “elif” pa je lahko poljubno število.

Če obstaja samo en pogojni izraz ali če obdelava pri false ni potrebna, lahko bloka “elif” in “else” izpustite.

Določite pogoje s primerjalnimi operatorji itd.

Pogoj določite z operacijo, ki vrača tip bool (true, false), na primer s primerjalnim operatorjem.

Primerjalni operatorji Pythona so naslednji

operaterrezultat
x < ytrue, če je x manjši od y
x <= ytrue, če je x manjši ali enak y
x > ytrue, če je x večji od y
x >= ytrue, če je x večji ali enak y
x == ytrue, če sta vrednosti x in y enaki
x != ytrue, če vrednosti x in y nista enakix is ytrue, če sta x in y isti predmetx is not ytrue, če x in y nista isti predmetx in ytrue, če je x vključen v yx not in ytrue, če x ni vključen v y

Primer. Zaradi priročnosti je definiran kot funkcija z izjavo def.

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

Naslednje lahko zapišemo na način, ki je značilen samo za Python. Za podrobnosti glejte naslednji članek.
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
  • ==
  • !=

Zgoraj je prikazana primerjava vrednosti; če želite primerjati identitete predmetov, uporabite naslednje

  • is
  • is not

Na primer pri primerjavi celega števila in števila s plavajočo vejico funkcija “==” vrne true, če sta vrednosti enakovredni, funkcija “is” pa vrne false, ker gre za različna predmeta.

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

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

print(i == f)
# True

print(i is f)
# False

Prav tako je mogoče določiti pogoj, ali seznam ali niz vsebuje določen element (znak).

  • in:vključiti
  • not in:brez
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

Pogoje določite po številu, seznamu itd.

Pogojni izraz izjave if je lahko število, seznam ali drug objekt, ki ni tipa bool (true, false).

if 10:
    print('True')
# True

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

V pogojnem izrazu izjave if v programu Python se naslednji predmeti štejejo za napačne.

Številke, ki predstavljajo ničlo, prazne nize, sezname itd., se štejejo za napačne, vse druge pa za resnične.

Kako je predmet ocenjen, lahko preverite s funkcijo bool().

print(bool(10))
# True

print(bool(0.0))
# False

print(bool([]))
# False

print(bool('False'))
# True

To lahko na primer uporabite za preprosto pisanje procesa, ko je seznam prazen.

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

Upoštevajte, da bo tudi niz 'False' resničen, saj bo, kot je prikazano v zgornjem primeru, vsak niz, ki v nizu ni prazen, resničen. Če želite pretvoriti določen niz, kot je 'True' ali 'False', v 1,0, uporabite funkcijo strtobool() v modulu distutils.util.

določanje več pogojev ali negacij z logičnimi operatorji (in, ali, ne)

Logične operatorje (and, or, not) lahko uporabite za logično konjunkcijo, logično disjunkcijo in negacijo več pogojev.

operater(Rezultat (v pogojnem izrazu stavka if)
x and ytrue, če sta oba x in y resnična
x or ytrue, če je x ali y resničen
not xfalse, če je x true, true, če je x false
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

Dejansko “x in y” in “x ali y” ne vračata True ali False, temveč bodisi x bodisi y. Dokler ju uporabljamo v pogojnih izrazih v stavkih if, nam z njima ni treba skrbeti, saj sta ovrednotena kot True ali False. Za podrobnosti glejte naslednji članek.

Uporabiti je mogoče več kot enkrat in in ali.

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

Pogojni izrazi za nove vrstice in več vrstic

Kadar je uporabljenih več pogojnih izrazov, ki so povezani z “in” ali “ali”, in vsaka vrstica postane dolga, je včasih treba pogojni izraz prekiniti in ga zapisati v več vrsticah.

Prekinitev vrstice lahko naredite s povratno poševnico ali tako, da celotno vrstico zaprete v oglate oklepaje.

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

Vrstico lahko s povratno poševnico prekinete tolikokrat, kot želite. Prav tako lahko vrstico poljubno večkrat prekinete v oklepajih. Odmiki niso omejeni.

Upoštevajte, da je to tehnika, ki jo lahko uporabite kjer koli v kodi Pythona, ne le v stavkih if.