代码之家  ›  专栏  ›  技术社区  ›  Noah Clark

在python中使用and and not运算符[重复]

  •  57
  • Noah Clark  · 技术社区  · 16 年前

    这是我的自定义类,它代表一个三角形。我正在尝试编写代码来检查 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
    
    3 回复  |  直到 7 年前
        1
  •  114
  •   Peter Hosey    11 年前

    你应该写:

    if (self.a != 0) and (self.b != 0) :
    

    & 是位运算符,不适用于布尔运算。相当于“ && “is”和“in python”。

    检查所需内容的较短方法是使用“in”运算符:

    if 0 not in (self.a, self.b) :
    

    您可以检查是否有任何内容是带有“in”的iterable的一部分,它适用于:

    • Tuples。即: "foo" in ("foo", 1, c, etc) 将返回真
    • 列表。即: "foo" in ["foo", 1, c, etc] 将返回真
    • 串。即: "a" in "ago" 将返回真
    • Dict. I. E: "foo" in {"foo" : "bar"} 将返回真

    作为对评论的回答:

    是的,使用“in”会比较慢,因为您正在创建一个tuple对象,但实际上性能不是这里的问题,而且可读性在Python中非常重要。

    三角形检查更容易阅读:

    0 not in (self.a, self.b, self.c)
    

    (self.a != 0) and (self.b != 0) and (self.c != 0) 
    

    重构也更容易。

    当然,在这个例子中,它并没有那么重要,它只是一个非常简单的片段。但是这种风格导致了一个蟒蛇代码,这导致了一个更快乐的程序员(减肥,改善性生活等)在大的程序。

        2
  •  21
  •   Melebius    7 年前

    使用关键字 and 不是 & 因为 & 是位运算符。

    小心点……正如你所知道的,在Java和C++中 & 运算符也是位运算符。在这些语言中进行布尔比较的正确方法是 && . 同样地 | 是位运算符,并且 || 是布尔运算符。在蟒蛇中 or 用于布尔比较。

        3
  •  11
  •   Trenton    7 年前

    它叫 and or 在蟒蛇中。