这是我的自定义类,它代表一个三角形。我正在尝试编写检查 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
最佳答案
你应该写:
if (self.a != 0) and (self.b != 0) :
"&
"是按位运算符,不适合 bool 运算。 “&&
”的等价物在 Python 中是“and”。
检查您想要的内容的更简单方法是使用“in”运算符:
if 0 not in (self.a, self.b) :
您可以使用“in”检查是否有任何内容是可迭代的一部分,它适用于:
- 元组。 IE :
"foo"in ("foo", 1, c, etc)
将返回 true - 列表。 IE :
"foo"in ["foo", 1, c, etc]
将返回 true - 字符串。 IE :
"a"in "ago"
将返回 true - 字典。 IE :
"foo"in {"foo": "bar"}
将返回 true
作为对评论的回答:
是的,使用“in”会比较慢,因为您正在创建一个 Tuple 对象,但这里的性能真的不是问题,而且 Python 中的可读性很重要。
对于三角形检查,它更容易阅读:
0 not in (self.a, self.b, self.c)
比
(self.a != 0) and (self.b != 0) and (self.c != 0)
重构也更容易。
当然,在这个例子中,它真的不是那么重要,它是非常简单的片段。但是这种风格导致了 Pythonic 代码,这导致程序员在大型程序上更快乐(以及减肥、改善性生活等)。
关于python - 在 Python 中使用 AND 和 NOT 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1075652/