这是我的自定义类,它代表一个三角形。我正在尝试编写代码来检查self.a
,self.b
和self.c
是否大于0,这意味着我有角度,角度,角度。
下面你会看到检查A和B的代码,但是当我只使用self.a != 0
时,它可以正常工作。我相信我没有正确使用&
。有任何想法吗?以下是我的称呼方式: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
答案 0 :(得分:116)
你应该写:
if (self.a != 0) and (self.b != 0) :
“&
”是位运算符,不适合布尔运算。 “&&
”的等价物在Python中是“和”。
检查所需内容的较短方法是使用“in”运算符:
if 0 not in (self.a, self.b) :
你可以检查是否有任何东西是“in”的迭代的一部分,它适用于:
"foo" in ("foo", 1, c, etc)
将返回true "foo" in ["foo", 1, c, etc]
将返回true "a" in "ago"
将返回true "foo" in {"foo" : "bar"}
将返回true 作为评论的答案:
是的,因为你正在创建一个Tuple对象,所以使用“in”会慢一些,但实际上这里的表演不是问题,而且可读性在Python中很重要。
对于三角形检查,它更容易阅读:
0 not in (self.a, self.b, self.c)
比
(self.a != 0) and (self.b != 0) and (self.c != 0)
重构也更容易。
当然,在这个例子中,它实际上并不重要,它是非常简单的代码片段。但是这种风格导致了一个Pythonic代码,这导致了一个更快乐的程序员(减肥,改善性生活等)。
答案 1 :(得分:21)
使用关键字and
,而不是&
,因为&
是位运算符。
小心这一点......只是你知道,在Java和C ++中,&
运算符也是一个运算符。在这些语言中进行布尔比较的正确方法是&&
。类似地,|
是位运算符,||
是布尔运算符。在Python中and
和or
用于布尔比较。
答案 2 :(得分:11)
在Python中称为and
和or
。