这是我的自定义类,它代表一个三角形.我正在尝试编写代码来检查是否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
Run Code Online (Sandbox Code Playgroud)
e-s*_*tis 123
你应该写:
if (self.a != 0) and (self.b != 0) :
Run Code Online (Sandbox Code Playgroud)
" &"是位运算符,不适合布尔运算.相当于" &&"在Python中是"和".
检查所需内容的更简单方法是使用"in"运算符:
if 0 not in (self.a, self.b) :
Run Code Online (Sandbox Code Playgroud)
您可以检查是否有任何东西是"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)
Run Code Online (Sandbox Code Playgroud)
比
(self.a != 0) and (self.b != 0) and (self.c != 0)
Run Code Online (Sandbox Code Playgroud)
重构也更容易.
当然,在这个例子中,它确实不是那么重要,它是非常简单的片段.但这种风格导致了Python的代码,这导致了一个快乐的程序员(和减肥,提高性生活等)上大项目.
Tom*_*Tom 22
使用关键字and,不是&因为&有点操作符.
小心这一点...只是你知道,在Java和C++中,&运算符也是一个操作符.在这些语言中进行布尔比较的正确方法是&&.类似地|是位运算符,并且||是布尔运算符.在Python中and,or用于布尔比较.