De operator AND en NOT gebruiken in Python

Hier is mijn aangepaste klasse die ik heb die een driehoek vertegenwoordigt. Ik probeer code te schrijven die controleert of self.a, self.ben self.cgroter zijn dan 0, wat zou betekenen dat ik Hoek, Hoek, Hoek heb.

Hieronder ziet u de code die controleert op A en B, maar als ik alleen self.a != 0gebruik, werkt het prima. Ik geloof dat ik &niet correct gebruik. Om het even welke ideeën? Hier is hoe ik het noem: print myTri.detType()

class Triangle:
    # Angle A To Angle C Connects Side F
    # Angle C to Angle B Connects Side D
    # Angle B to Angle A Connects Side E
    def __init__(self, a, b, c, d, e, f):
        self.a = a
        self.b = b
        self.c = c
        self.d = d
        self.e = e
        self.f = f
    def detType(self):
        #Triangle Type AAA
        if self.a != 0 & self.b != 0:
            return self.a
        #If self.a > 10:
            #return AAA
        #Triangle Type AAS
        #elif self.a = 0:
            #return AAS
        #Triangle Type ASA
        #Triangle Type SAS
        #Triangle Type SSS  
        #else:
            #return unknown

Antwoord 1, autoriteit 100%

Je moet schrijven:

if (self.a != 0) and (self.b != 0) :

&” is de bitsgewijze operator en is niet geschikt voor booleaanse bewerkingen. Het equivalent van “&&” is “en” in Python.

Een kortere manier om te controleren wat u wilt, is door de “in”-operator te gebruiken:

if 0 not in (self.a, self.b) :

Je kunt controleren of iets deel uitmaakt van een iterable met “in”, het werkt voor:

  • Tuples. I.E : "foo" in ("foo", 1, c, etc)zal true retourneren
  • Lijsten. I.E : "foo" in ["foo", 1, c, etc]zal true retourneren
  • Snaren. I.E : "a" in "ago"zal true retourneren
  • Dict. I.E : "foo" in {"foo" : "bar"}geeft true terug

Als antwoord op de opmerkingen:

Ja, het gebruik van “in” is langzamer omdat je een Tuple-object maakt, maar prestaties zijn hier geen probleem, en leesbaarheid is erg belangrijk in Python.

Voor de driehoekscontrole is het gemakkelijker te lezen:

0 not in (self.a, self.b, self.c)

Dan

(self.a != 0) and (self.b != 0) and (self.c != 0) 

Het is ook gemakkelijker om te refactoren.

Natuurlijk is het in dit voorbeeld niet zo belangrijk, het is een heel eenvoudig fragment. Maar deze stijl leidt tot een Pythonic-code, die leidt tot een gelukkiger programmeur (en afvallen, seksleven verbeteren, enz.) op grote programma’s.


Antwoord 2, autoriteit 18%

Gebruik het trefwoord and, niet &omdat &een bit-operator is.

Wees hier voorzichtig mee… zodat u weet dat in Java en C++ de operator &OOK een bit-operator is. De juiste manier om een booleaanse vergelijking te maken in die talen is &&. Evenzo is |een bit-operator en is ||een booleaanse operator. In Python worden anden orgebruikt voor booleaanse vergelijkingen.


Antwoord 3, autoriteit 10%

Het heet anden orin Python.

Other episodes