Vysvětlete podmíněné větvení pomocí příkazů if v jazyce Python.
- Základy příkazů if (if, elif, else)
- Zadávání podmínek pomocí operátorů porovnávání atd.
- Zadejte podmínky podle čísla, seznamu atd.
- Zadávání více podmínek nebo negací pomocí logických operátorů (a, nebo, ne)
- Podmíněné výrazy na nových řádcích a více řádcích
Existuje také ternární operátor, který popisuje podmíněnou větev na jednom řádku. Viz následující článek.
- SOUVISEJÍCÍ:Zápis příkazů if na jeden řádek pomocí ternárního operátoru jazyka Python (podmíněný operátor)
Základy příkazů if (if, elif, else)
Základní tvar příkazu if je následující
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.`
Příkaz „elif“ odpovídá příkazu „else if“ v jazyce C a dalších jazycích, přičemž příkazů „elif“ může být libovolný počet.
Pokud existuje pouze jeden podmíněný výraz nebo není nutné zpracování při false, lze bloky „elif“ a „else“ vynechat.
Zadávání podmínek pomocí operátorů porovnávání atd.
Zadejte podmínku pomocí operace, která vrací typ bool (true, false), například operátor porovnání.
Operátory porovnávání v jazyce Python jsou následující
operátor | výsledek |
---|---|
x < y | true, pokud je x menší než y |
x <= y | true, pokud x je menší nebo rovno y |
x > y | true, pokud je x větší než y |
x >= y | true, pokud x je větší nebo rovno y |
x == y | true, pokud jsou hodnoty x a y stejné |
x != y
x is y
x is not y
x in y
x not in y
Příklad. Pro usnadnění je definován jako funkce s příkazem 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
Následující příkaz lze zapsat způsobem, který je pro Python jedinečný. Podrobnosti naleznete v následujícím článku.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
==
!=
Výše uvedené je porovnání hodnot; pro porovnání identit objektů použijte následující příkaz.
is
is not
Například při porovnávání celého čísla a čísla s pohyblivou řádovou čárkou funkce „==“ vrátí true, pokud jsou hodnoty ekvivalentní, ale funkce „is“ vrátí false, protože se jedná o různé objekty.
i = 10
print(type(i))
# <class 'int'>
f = 10.0
print(type(f))
# <class 'float'>
print(i == f)
# True
print(i is f)
# False
Je také možné zadat podmínku, zda seznam nebo řetězec obsahuje určitý prvek (znak).
in
:zahrnoutnot in
:s výjimkou
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
Zadejte podmínky podle čísla, seznamu atd.
Podmíněným výrazem příkazu if může být číslo, seznam nebo jiný objekt, který není typu bool (true, false).
if 10:
print('True')
# True
if [0, 1, 2]:
print('True')
# True
V podmíněném výrazu příkazu if jazyka Python jsou následující objekty považovány za false.
- Konstanty definované jako false:
None
,false
- Nula v číselném typu:
0
,0
,0j
,Decimal(0)
,Fraction(0, 1)
- Prázdná sekvence nebo kolekce:
''
,()
,[]
,{}
,set()
,range(0)
Truth Value Testing — Built-in Types — Python 3.10.4 Documentation
Čísla představující nulu, prázdné řetězce, seznamy atd. jsou považovány za nepravdivé; všechny ostatní jsou považovány za pravdivé.
Jak je objekt posuzován, lze zjistit pomocí funkce bool().
print(bool(10))
# True
print(bool(0.0))
# False
print(bool([]))
# False
print(bool('False'))
# True
To lze použít například k jednoduchému zápisu procesu, když je seznam prázdný.
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
Všimněte si, že řetězec 'False' bude také pravdivý, protože jak je ukázáno v příkladu výše, každý řetězec, který není v řetězci prázdný, bude pravdivý. Chcete-li převést konkrétní řetězec, například 'True' nebo 'False', na hodnotu 1,0, použijte funkci strtobool() v modulu distutils.util.
Zadávání více podmínek nebo negací pomocí logických operátorů (a, nebo, ne)
Logické operátory (a, nebo, ne) lze použít k logické konjunkci, logické disjunkci a negaci více podmínek.
operátor | (Výsledek (v podmíněném výrazu příkazu if) |
---|---|
x and y | true, pokud jsou x i y pravdivé |
x or y | true, pokud je pravdivé x nebo y |
not x | false, pokud je x true, true, pokud 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
Ve skutečnosti příkazy „x a y“ a „x nebo y“ nevracejí True nebo False, ale buď x, nebo y. Pokud jsou použity v podmíněných výrazech v příkazech if, není třeba se jimi zabývat, protože se vyhodnotí jako True nebo False. Podrobnosti naleznete v následujícím článku.
- SOUVISEJÍCÍ:Logické operátory jazyka Python „and, or, not“ (logická konjunkce, logická disjunkce, negace)
Je možné použít a a nebo více než jednou.
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
Podmíněné výrazy na nových řádcích a více řádcích
Pokud je použito více podmíněných výrazů, které jsou spojeny spojkami „a“ nebo „nebo“, a každý řádek je dlouhý, je někdy nutné podmíněný výraz rozdělit a zapsat na více řádků.
Zlom řádku lze provést pomocí zpětného lomítka nebo uzavřením celého řádku do závorek.
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
Zpětným lomítkem můžete řádek přerušit libovolný početkrát. Stejně tak můžete zalomit řádek libovolný početkrát v závorkách. Odsazení není omezeno.
Všimněte si, že tuto techniku lze použít kdekoli v kódu Pythonu, nejen v příkazech if.