Pythonin loogiset operaattorit and, or ja not (looginen konjunktio, disjunktio, negaatio).

liiketoiminta

Python tarjoaa loogisia operaattoreita loogisten (Boolen) operaatioiden suorittamiseen.(and,or,not)
Sitä käytetään kuvaamaan useiden ehtojen välistä suhdetta if-lauseessa.

Tässä osassa kuvataan seuraavat asiat.

  • risteys: and
  • looginen lisäys: or
  • kieltäminen: not
  • and,or,notOperaattorin etusija

Lisäksi seuraavat seikat selitetään varoituksina.

  • Muiden kuin bool-tyyppisten objektien loogiset operaattorit
  • and,orNämä paluuarvot eivät välttämättä ole tyyppiä bool.
  • Oikosulku (oikosulun arviointi)

risteys: and

ja palauttaa kahden arvon loogisen tulon.

print(True and True)
# True

print(True and False)
# False

print(False and True)
# False

print(False and False)
# False

Itse asiassa sitä ei useinkaan käytetä true- tai false-lausekkeisiin, vaan ehdollisiin lausekkeisiin, joissa käytetään vertailuoperaattoreita. Tiedoksi, että vertailuoperaattorit ovat seuraavat.

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

print(a < 100)
# True

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

ja ne voidaan ketjuttaa seuraavasti.

print(0 < a < 100)
# True

looginen lisäys: or

tai palauttaa kahden arvon loogisen TAI-arvon.

print(True or True)
# True

print(True or False)
# True

print(False or True)
# True

print(False or False)
# False

kieltäminen: not

not” palauttaa arvon negaation; true ja false käännetään päinvastaisiksi.

print(not True)
# False

print(not False)
# True

and,or,notOperaattorin etusija

Näiden loogisten operaattoreiden etusijajärjestys on seuraava: not on korkein.

  1. not
  2. and
  3. or

Seuraavassa esimerkkikoodissa yllä oleva lauseke tulkitaan ikään kuin se olisi alla oleva lauseke. Koska ylimääräiset sulkeet eivät ole ongelma, voi olla helpompaa kuvata ne selkeästi tämän esimerkin kaltaisissa tapauksissa.

print(True or True and False)
# True

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

Jos haluat käyttää tai ennen ja:ta, käytä sulkuja().

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

<,>Näillä vertailuoperaattoreilla on vielä suurempi etusija kuin ei-vertailuoperaattoreilla. Siksi sulkuja ei tarvita jokaisen vertailuoperaation yhteydessä, kuten edellä olevassa esimerkissä.

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

Katso alla olevasta virallisesta dokumentaatiosta yhteenveto operaattoreiden etusijajärjestyksestä Pythonissa.

Muiden kuin bool-tyyppisten objektien loogiset operaattorit

Näillä loogisilla operaattoreilla bool-tyyppien (true, false) lisäksi myös numeroita, merkkijonoja, luetteloita jne. käsitellään boolean-arvoina.

Seuraavia objekteja pidetään väärinä Pythonin loogisissa operaatioissa.

  • Vääriksi määritellyt vakiot: None,false
  • Nolla numeerisissa tyypeissä: 0,0,0j,Decimal(0),Fraction(0, 1)
  • Tyhjä sarja tai kokoelma: '',(),[],{},set(),range(0)

Kaikkia muita arvoja pidetään totena.

Funktiota bool() voidaan käyttää objektin boolean-arvon saamiseen. Huomaa, että merkkijonoa '0' tai 'False' pidetään totena.

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

Jos haluat käsitellä merkkijonon '0' tai 'false' arvoa false, käytä distutils.util.strtobool().

and,orNämä paluuarvot eivät välttämättä ole tyyppiä bool.

Seuraavassa on esimerkki muusta objektista kuin bool-tyypistä, joka näyttää kunkin operaattorin tuloksen numeeriselle arvolle.

x = 10  # True
y = 0  # False

print(x and y)
# 0

print(x or y)
# 10

print(not x)
# False

Kuten yllä olevasta esimerkistä näkyy, Pythonissa and ja or eivät palauta bool-tyypin true- tai false-arvoa, vaan palauttavat vasemmalla tai oikealla olevan arvon sen mukaan, onko se true vai false. Esimerkki on numeerinen, mutta sama pätee myös muihin tyyppeihin, kuten merkkijonoihin ja luetteloihin. Muuten not palauttaa bool-tyypin true tai false.

And- ja or-arvojen palautusarvojen määritelmät ovat seuraavat.

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

Kun vasemman- ja oikeanpuoleisten lausekkeiden arvot ovat erikseen true ja false, palautusarvot ovat helposti ymmärrettävissä. Toisaalta, jos molemmat ovat tosi tai molemmat ovat epätosi, palautusarvo on erilainen järjestyksestä riippuen.

Jos käytät sitä ehdollisena lausekkeena if-lausekkeessa jne., tulos arvioidaan boolean-arvona ja käsitellään, joten sinun ei tarvitse huolehtia siitä, mutta jos käytät paluuarvoa jatkokäsittelyyn, sinun on oltava varovainen.

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

Jos haluat käsitellä sitä totena tai vääränä, voit tehdä kuten edellisessä esimerkissä.
bool(x and y)

Seuraavassa taulukossa on yhteenveto ja ja tai:n palautusarvoista.

xyx and yx or y
truefalseyx
falsetruexy
truetrueyx
falsefalsexy

Oikosulku (oikosulun arviointi)

Kuten yllä olevasta taulukosta näkyy, jos x on epätosi x:ssä ja y:ssä tai jos x on tosi x:ssä tai y:ssä, paluuarvo on x riippumatta y:n arvosta.

Tällaisessa tapauksessa y:tä ei arvioida.

and,orHuomaa, että jos kutsut näiden prosessien oikealla puolella olevaa funktiota tai metodia suorittamaan jotakin käsittelyä, prosessia ei ehkä suoriteta vasemman puolen tuloksesta riippuen.

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
Copied title and URL