Ang mga lohikal na operator ng Python at, o, at hindi (lohikal na pagkakaugnay, disjunction, negation)

Negosyo

Nagbibigay ang Python ng mga lohikal na operator upang magsagawa ng mga lohikal (Boolean) na operasyon.(and,or,not)
Ito ay ginagamit upang ilarawan ang kaugnayan sa pagitan ng maraming kundisyon sa isang if statement.

Inilalarawan ng seksyong ito ang mga sumusunod.

  • interseksyon:and
  • lohikal na idagdag:or
  • pagtanggi:not
  • and,or,notPangunahing operator

Bilang karagdagan, ang mga sumusunod na punto ay ipinaliwanag bilang pag-iingat.

  • Mga lohikal na operator para sa mga bagay na may uri maliban sa bool
  • and,orAng mga return value na ito ay hindi kinakailangang uri ng bool.
  • Maikling circuit (pagsusuri ng short circuit)

interseksyon:and

at ibinabalik ang lohikal na produkto ng dalawang halaga.

print(True and True)
# True

print(True and False)
# False

print(False and True)
# False

print(False and False)
# False

Sa katunayan, ito ay madalas na ginagamit hindi para sa totoo o mali, ngunit para sa mga kondisyong expression na gumagamit ng mga operator ng paghahambing. Para sa iyong impormasyon, ang mga operator ng paghahambing ay ang mga sumusunod.

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

print(a < 100)
# True

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

at maaaring pagsama-samahin gaya ng sumusunod.

print(0 < a < 100)
# True

lohikal na idagdag:or

o ibinabalik ang lohikal na OR ng dalawang halaga.

print(True or True)
# True

print(True or False)
# True

print(False or True)
# True

print(False or False)
# False

pagtanggi:not

hindi” ay nagbabalik ng negasyon ng halaga; ang totoo at mali ay binabaligtad.

print(not True)
# False

print(not False)
# True

and,or,notPangunahing operator

Ang pagkakasunud-sunod ng precedence ng mga lohikal na operator na ito ay ang mga sumusunod: hindi ang pinakamataas.

  1. not
  2. and
  3. or

Sa sumusunod na sample code, ang expression sa itaas ay binibigyang-kahulugan na parang ito ang nasa ibaba. Dahil walang problema sa mga dagdag na panaklong, maaaring mas madaling ilarawan ang mga ito sa mga kaso tulad ng halimbawang ito.

print(True or True and False)
# True

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

Kung gusto mong gumana o bago at, gumamit ng mga panaklong().

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

<,>Ang mga operator ng paghahambing na ito ay may mas mataas na priyoridad kaysa hindi. Samakatuwid, ang mga panaklong ay hindi kinakailangan para sa bawat operasyon ng paghahambing, tulad ng nangyari sa halimbawa sa itaas.

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

Tingnan ang opisyal na dokumentasyon sa ibaba para sa isang buod ng operator precedence sa Python.

Mga lohikal na operator para sa mga bagay na may uri maliban sa bool

With these logical operators, not only bool types (true, false), but also numbers, strings, lists, etc. are processed as boolean values.

Ang mga sumusunod na bagay ay itinuturing na mali sa mga lohikal na operasyon ng Python.

  • Tinukoy na false ang mga constant:None,false
  • Zero sa mga uri ng numero:0,0,0j,Decimal(0),Fraction(0, 1)
  • Walang laman na pagkakasunod-sunod o koleksyon:',(),[],{},set(),range(0)

Ang lahat ng iba pang mga halaga ay itinuturing na totoo.

Ang function na bool() ay maaaring gamitin upang makuha ang boolean na halaga ng isang bagay. Tandaan na ang string na ‘0’ o ‘False’ ay itinuturing na totoo.

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

Upang pangasiwaan ang ‘0’ o ‘false’ sa isang string bilang false, gumamit ng distutils.util.strtobool().

and,orAng mga return value na ito ay hindi kinakailangang uri ng bool.

Narito ang isang halimbawa ng isang bagay maliban sa isang uri ng bool, na nagpapakita ng resulta ng bawat operator sa isang numeric na halaga.

x = 10  # True
y = 0  # False

print(x and y)
# 0

print(x or y)
# 10

print(not x)
# False

Tulad ng makikita mo mula sa halimbawa sa itaas, at at o sa Python ay hindi nagbabalik ng true o false ng uri ng bool, ngunit ibalik ang halaga sa kaliwa o kanan depende sa kung ito ay totoo o mali. Ang halimbawa ay numeric, ngunit ang parehong naaangkop sa iba pang mga uri tulad ng mga string at listahan. Hindi sinasadya, hindi nagbabalik ng true o false ng uri ng bool.

Ang mga kahulugan ng mga return value ng at at o ay ang mga sumusunod.

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

Kapag magkahiwalay na totoo at mali ang mga value ng kaliwa at kanang expression, madaling maunawaan ang mga return value. Sa kabilang banda, kung pareho ang totoo o pareho ang mali, ang halaga ng pagbabalik ay mag-iiba depende sa pagkakasunud-sunod.

Kung gagamitin mo ito bilang conditional expression sa isang if statement, atbp., ang resulta ay hinuhusgahan bilang boolean value at naproseso, kaya hindi mo kailangang mag-alala tungkol dito, ngunit kung gagamitin mo ang return value para sa karagdagang pagproseso, ikaw kailangang mag-ingat.

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

Kung gusto mong ituring ito bilang totoo o mali, maaari mong gawin tulad ng sa huling halimbawa.
bool(x and y)

Ang mga return value ng at at o ay ibinubuod sa talahanayan sa ibaba.

xyx and yx or y
truefalseyx
falsetruexy
truetrueyx
falsefalsexy

Maikling circuit (pagsusuri ng short circuit)

Tulad ng makikita mo mula sa talahanayan sa itaas, kung ang x ay mali sa x at y, o kung ang x ay totoo sa x o y, ang ibabalik na halaga ay x anuman ang halaga ng y.

Sa ganitong kaso, ang y ay hindi sinusuri.

and,orTandaan na kung tatawag ka ng function o paraan sa kanang bahagi ng mga prosesong ito para magsagawa ng ilang pagproseso, maaaring hindi maisagawa ang proseso depende sa resulta sa kaliwang bahagi.

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