python - 在 Python 中使用 AND 和 NOT 运算符

标签 python operators

这是我的自定义类,它代表一个三角形。我正在尝试编写检查 self.aself.bself.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/

相关文章:

Python-变量作用域

python - 如何使用 dataframe between_time() 函数

python - 有没有比这个 : 更好的从列表中随机选择的方法

java - || 的功能运算符(operator)

mysql - 在不加入mysql的情况下使用所有运算符选择子查询

jquery - 通过 wtform 字段获取数据迭代

python - 调用另一个 python 脚本的 main() 并获取 STDOUT 结果

谁能解释一下这些 c 运算符

c - If 语句条件中的二元 AND 运算符

成员运算符的 C++ enable_if(或解决方法)