Magyarázza el a feltételes elágazást if utasításokkal Pythonban.
- Az if utasítások alapjai (if, elif, else)
- Feltételek megadása összehasonlító operátorokkal stb.
- Adja meg a feltételeket számmal, listával stb.
- Több feltétel vagy tagadás megadása logikai operátorokkal (és, vagy, vagy, nem)
- Feltételes kifejezések új sorokban és több sorban
Létezik egy terner operátor is, amely egy feltételes elágazást ír le egy sorban. Lásd a következő cikket.
Az if utasítások alapjai (if, elif, else)
Az if utasítás alapvető formája a következő
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.`
Az “elif” megfelel az “else if”-nek a C-ben és más nyelvekben, és tetszőleges számú “elif” lehet.
Ha csak egy feltételes kifejezés van, vagy ha nem szükséges a false feldolgozása, az “elif” és “else” blokkok elhagyhatók.
Feltételek megadása összehasonlító operátorokkal stb.
Adja meg a feltételt egy bool típusú (igaz, hamis) művelettel, például egy összehasonlító operátorral.
A Python összehasonlító operátorok a következők
üzemeltető | eredmény |
---|---|
x < y | igaz, ha x kisebb, mint y |
x <= y | true ha x kisebb vagy egyenlő mint y |
x > y | igaz, ha x nagyobb, mint y |
x >= y | true ha x nagyobb vagy egyenlő mint y |
x == y | true, ha az x és y értékek megegyeznek |
x != y
x is y
x is not y
x in y
x not in y
Példa. Az egyszerűség kedvéért a def utasítással függvényként definiáljuk.
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
Az alábbiakat a Pythonban egyedülálló módon lehet leírni. A részletekért lásd a következő cikket.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
==
!=
A fentiekben értékeket hasonlítunk össze; az objektumok identitásának összehasonlításához használjuk a következőt
is
is not
Például egy egész szám és egy lebegőpontos szám összehasonlításakor az “==” igazat ad vissza, ha az értékek egyenértékűek, de az “is” hamisat ad vissza, mivel különböző objektumokról van szó.
i = 10
print(type(i))
# <class 'int'>
f = 10.0
print(type(f))
# <class 'float'>
print(i == f)
# True
print(i is f)
# False
Lehetőség van arra is, hogy feltételként megadjuk, hogy egy lista vagy egy karakterlánc tartalmaz-e egy adott elemet (karaktert).
in
:tartalmazza a címet.not in
:ide nem értve
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
Adja meg a feltételeket számmal, listával stb.
Az if utasítás feltételes kifejezése lehet szám, lista vagy más objektum, amely nem bool (true, false) típusú.
if 10:
print('True')
# True
if [0, 1, 2]:
print('True')
# True
A Python if utasítás feltételes kifejezésében a következő objektumok hamisnak tekinthetők.
- Falsnak definiált konstansok:
None
,false
- Nulla numerikus típusban:
0
,0
,0j
,Decimal(0)
,Fraction(0, 1)
- Üres sorozat vagy gyűjtemény:
''
,()
,[]
,{}
,set()
,range(0)
Truth Value Testing — Built-in Types — Python 3.10.4 Documentation
A nullát, üres karakterláncokat, listákat stb. ábrázoló számok hamisnak, az összes többi igaznak minősül.
Az objektum megítélése a bool() segítségével ellenőrizhető.
print(bool(10))
# True
print(bool(0.0))
# False
print(bool([]))
# False
print(bool('False'))
# True
Ez például arra használható, hogy egyszerűen kiírja a folyamatot, ha a lista üres.
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
Vegyük észre, hogy a 'False' karakterlánc is igaz lesz, mert ahogy a fenti példában is látható, minden olyan karakterlánc, amely nem üres a karakterláncban, igaz lesz.”. Egy adott karakterlánc, például az 'True' vagy a 'False' 1,0-ra történő átalakításához használjuk a distutils.util modulban található strtobool() függvényt.
Több feltétel vagy tagadás megadása logikai operátorokkal (és, vagy, vagy, nem)
A logikai operátorok (and, or, not) a logikai konjunkció, a logikai diszjunkció és a több feltétel negációja kezelésére használhatók.
üzemeltető | (Eredmény (egy if utasítás feltételes kifejezésében) |
---|---|
x and y | igaz, ha x és y is igaz |
x or y | igaz, ha x vagy y igaz |
not x | hamis, ha x igaz, igaz, ha x hamis |
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
Valójában az “x és y” és az “x vagy y” nem True vagy False, hanem vagy x vagy y. Amíg ezeket feltételes kifejezésekben használják az if utasításokban, nem kell aggódni miattuk, mivel vagy True vagy False értéket adnak. A részleteket lásd a következő cikkben.
- KAPCSOLÓDÓ:A Python logikai operátorai “és, vagy, nem” (logikai konjunkció, logikai diszjunkció, negáció)
Az és és vagy többször is használható.
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
Feltételes kifejezések új sorokban és több sorban
Ha több feltételes kifejezést használunk “és” vagy “vagy” kapcsolattal, és minden sor hosszú lesz, néha szükséges a feltételes kifejezést megszakítani és több sorba írni.
A sortörés történhet backslash használatával vagy az egész sor zárójelbe zárásával.
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
A backslash használatával annyiszor szakíthat meg egy sort, ahányszor csak akarja. Hasonlóképpen, a zárójeleken belül is tetszőleges számúszor megszakíthat egy sort. Nincs behúzási korlát.
Megjegyzendő, hogy ez a technika bárhol használható a Python kódban, nem csak az if utasításokban.