it-swarm.com.de

Verwenden des Operators AND und NOT in Python

Hier ist meine benutzerdefinierte Klasse, die ein Dreieck darstellt. Ich versuche, Code zu schreiben, der prüft, ob self.a, self.b Und self.c Größer als 0 sind. Dies würde bedeuten, dass ich Angle, Angle, Angle habe.

Unten sehen Sie den Code, der nach A und B sucht. Wenn ich jedoch nur self.a != 0 Verwende, funktioniert er einwandfrei. Ich glaube, ich verwende & Nicht richtig. Irgendwelche Ideen? So rufe ich es auf: 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
59
Noah Clark

Sie sollten schreiben:

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

"&" Ist der bitweise Operator und nicht für boolesche Operationen geeignet. Das Äquivalent von "&&" Ist "und" in Python.

Eine kürzere Möglichkeit zu überprüfen, was Sie möchten, ist die Verwendung des Operators "in":

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

Sie können mit "in" prüfen, ob etwas Teil einer Iteration ist. Dies funktioniert für:

  • Tuples. IE: "foo" in ("foo", 1, c, etc) gibt true zurück
  • Listen. IE: "foo" in ["foo", 1, c, etc] Gibt true zurück
  • Streicher. IE: "a" in "ago" Gibt true zurück
  • Dikt. IE: "foo" in {"foo" : "bar"} Gibt true zurück

Als Antwort auf die Kommentare:

Ja, die Verwendung von "in" ist langsamer, da Sie ein Tuple-Objekt erstellen, aber die Leistung spielt hier keine Rolle, und die Lesbarkeit ist in Python von großer Bedeutung.

Für die Dreiecksüberprüfung ist es einfacher zu lesen:

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

Als

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

Es ist auch einfacher umzugestalten.

Natürlich ist es in diesem Beispiel nicht so wichtig, es ist ein sehr einfaches Snippet. Aber dieser Stil führt zu einem Pythonic-Code, der bei großen Programmen zu einem glücklicheren Programmierer (und Abnehmen, Verbesserung des Sexuallebens usw.) führt.

120
e-satis

Verwenden Sie das Schlüsselwort and, nicht & weil & ist ein Bitoperator.

Seien Sie vorsichtig damit ... nur damit Sie wissen, in Java und C++, das & operator ist AUCH ein bit operator. Der richtige Weg, einen Booleschen Vergleich in diesen Sprachen durchzuführen, ist &&. Ähnlich | ist ein Bitoperator und || ist ein Boolescher Operator. In Python and und or werden für boolesche Vergleiche verwendet.

21
Tom

Es heißt and und or in Python.

11
Lennart Regebro