Hier is mijn aangepaste klasse die ik heb die een driehoek vertegenwoordigt. Ik probeer code te schrijven die controleert of self.a
, self.b
en self.c
groter 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 != 0
gebruik, 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 and
en or
gebruikt voor booleaanse vergelijkingen.
Antwoord 3, autoriteit 10%
Het heet and
en or
in Python.