Logické operátory a, nebo a ne (logická konjunkce, disjunkce, negace) v jazyce Python

Podnikání

Python nabízí logické operátory pro provádění logických (logických) operací.(and,or,not)
Používá se k popisu vztahu mezi více podmínkami v příkazu if.

Tato část popisuje následující.

  • křižovatka: and
  • logické přidání: or
  • odmítnutí: not
  • and,or,notPřednost operátora

Kromě toho jsou jako varování vysvětleny následující body.

  • Logické operátory pro objekty jiného typu než bool
  • and,orTyto návratové hodnoty nemusí být nutně typu bool.
  • Zkrat (vyhodnocení zkratu)

křižovatka: and

a vrací logický součin dvou hodnot.

print(True and True)
# True

print(True and False)
# False

print(False and True)
# False

print(False and False)
# False

Ve skutečnosti se často nepoužívá pro true nebo false, ale pro podmíněné výrazy s použitím operátorů porovnávání. Pro vaši informaci jsou operátory porovnávání následující.

  • <
  • >
a = 10
print(0 < a)
# True

print(a < 100)
# True

print(0 < a and a < 100)
# True

a lze je spojit takto.

print(0 < a < 100)
# True

logické přidání: or

nebo vrátí logickou OR těchto dvou hodnot.

print(True or True)
# True

print(True or False)
# True

print(False or True)
# True

print(False or False)
# False

odmítnutí: not

not“ vrací negaci hodnoty; true a false jsou obrácené.

print(not True)
# False

print(not False)
# True

and,or,notPřednost operátora

Pořadí priority těchto logických operátorů je následující: not je nejvyšší.

  1. not
  2. and
  3. or

V následující ukázce kódu je výše uvedený výraz interpretován jako níže uvedený. Protože s extra závorkami není problém, může být jednodušší je v případech, jako je tento příklad, přehledně popsat.

print(True or True and False)
# True

print(True or (True and False))
# True

Pokud chcete operovat s nebo před a, použijte závorky().

print((True or True) and False)
# False

<,>Tyto srovnávací operátory mají ještě vyšší prioritu než operátory, které nemají prioritu. Proto nejsou nutné závorky pro každou porovnávací operaci, jako tomu bylo v příkladu výše.

print(0 < a and a < 100)
# True

Shrnutí priority operátorů v jazyce Python naleznete v oficiální dokumentaci níže.

Logické operátory pro objekty jiného typu než bool

Pomocí těchto logických operátorů se jako logické hodnoty zpracovávají nejen typy bool (true, false), ale také čísla, řetězce, seznamy atd.

Následující objekty jsou v logických operacích jazyka Python považovány za nepravdivé.

  • Konstanty definované jako false: None,false
  • Nula v číselných typech: 0,0,0j,Decimal(0),Fraction(0, 1)
  • Prázdná sekvence nebo kolekce: '',(),[],{},set(),range(0)

Všechny ostatní hodnoty jsou považovány za pravdivé.

Funkci bool() lze použít k získání logické hodnoty objektu. Všimněte si, že řetězec '0' nebo 'False' je považován za pravdivý.

print(bool(10))
# True

print(bool(0))
# False

print(bool(''))
# False

print(bool('0'))
# True

print(bool('False'))
# True

print(bool([]))
# False

print(bool([False]))
# True

Chcete-li zpracovat '0' nebo 'false' v řetězci jako false, použijte distutils.util.strtobool().

and,orTyto návratové hodnoty nemusí být nutně typu bool.

Zde je příklad objektu jiného než typu bool, který ukazuje výsledek každého operátoru na číselné hodnotě.

x = 10  # True
y = 0  # False

print(x and y)
# 0

print(x or y)
# 10

print(not x)
# False

Jak je vidět z výše uvedeného příkladu, and a or v jazyce Python nevrací true nebo false typu bool, ale vrací hodnotu vlevo nebo vpravo podle toho, zda je true nebo false. Příklad je číselný, ale totéž platí i pro jiné typy, jako jsou řetězce a seznamy. Mimochodem, not vrací true nebo false typu bool.

Definice návratových hodnot a a nebo jsou následující.

The expression x and y first evaluates x; if x is false, its value is returned; otherwise, y is evaluated and the resulting value is returned.

The expression x or y first evaluates x; if x is true, its value is returned; otherwise, y is evaluated and the resulting value is returned.

6.11. Boolean operations — Expressions — Python 3.10.1 Documentation

Pokud jsou hodnoty levého a pravého výrazu zvlášť true a false, jsou návratové hodnoty snadno pochopitelné. Na druhou stranu, pokud jsou oba výrazy pravdivé nebo oba nepravdivé, bude se návratová hodnota lišit v závislosti na pořadí.

Pokud jej použijete jako podmíněný výraz v příkazu if apod., výsledek se vyhodnotí jako logická hodnota a zpracuje se, takže se o něj nemusíte starat, ale pokud použijete návratovou hodnotu pro další zpracování, musíte být opatrní.

x = 10  # True
y = 100  # True

print(x and y)
# 100

print(y and x)
# 10

print(x or y)
# 10

print(y or x)
# 100
x = 0  # False
y = 0.0  # False

print(x and y)
# 0

print(y and x)
# 0.0

print(x or y)
# 0.0

print(y or x)
# 0

print(bool(x and y))
# False

Pokud s ní chcete zacházet jako s pravdivou nebo nepravdivou, můžete to udělat jako v posledním příkladu.
bool(x and y)

Návratové hodnoty příkazů and a or jsou shrnuty v následující tabulce.

xyx and yx or y
truefalseyx
falsetruexy
truetrueyx
falsefalsexy

Zkrat (vyhodnocení zkratu)

Jak je vidět z výše uvedené tabulky, pokud je x false v x a y nebo pokud je x true v x nebo y, návratová hodnota bude x bez ohledu na hodnotu y.

V takovém případě se y nevyhodnocuje.

and,orVšimněte si, že pokud zavoláte funkci nebo metodu na pravé straně těchto procesů a provedete nějaké zpracování, proces se nemusí provést v závislosti na výsledku na levé straně.

def test():
    print('function is called')
    return True

print(True and test())
# function is called
# True

print(False and test())
# False

print(True or test())
# True

print(False or test())
# function is called
# True