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
operaator | tulemus |
---|---|
x < y | true, kui x on väiksem kui y |
x <= y | true, kui x on väiksem või võrdne y-ga |
x > y | true, kui x on suurem kui y |
x >= y | true, kui x on suurem või võrdne y-ga |
x == y | true, kui x ja y väärtused on võrdsed |
x != y
x is y
x is not y
x in y
x not in y
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
:lisadanot 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.
- Konstandid, mis on määratletud valeks:
None
,false
- Null numbrilistes tüüpides:
0
,0
,0j
,Decimal(0)
,Fraction(0, 1)
- Tühi jada või kogumik:
''
,()
,[]
,{}
,set()
,range(0)
Truth Value Testing — Built-in Types — Python 3.10.4 Documentation
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 y | tõene, kui nii x kui ka y on tõesed |
x or y | tõene, kui kas x või y on tõene |
not x | vale, 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.