Jak psát podmíněné větve pomocí příkazů if v jazyce Python

Podnikání

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.

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átorvýsledek
x < ytrue, pokud je x menší než y
x <= ytrue, pokud x je menší nebo rovno y
x > ytrue, pokud je x větší než y
x >= ytrue, pokud x je větší nebo rovno y
x == ytrue, pokud jsou hodnoty x a y stejné
x != ytrue, pokud se hodnoty x a y nerovnajíx is ytrue, pokud jsou x a y stejný objektx is not ytrue, pokud x a y nejsou stejný objektx in ytrue, pokud je x obsaženo v yx not in ytrue, pokud x není obsaženo v 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:zahrnout
  • not 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.

Čí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 ytrue, pokud jsou x i y pravdivé
x or ytrue, pokud je pravdivé x nebo y
not xfalse, 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.

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.