矩形内的点

时间:2014-02-25 01:26:24

标签: python function class if-statement rectangles

我有一个点和矩形类。我试图在矩形类中编写一个函数来检查点是否在矩形中,但是我遇到了语法错误。

class Point(object):
    def __init__(self, x=0, y=0):
       self.x = x
       self.y = y

    def __str__(self):
       return "({},{})".format(self.x, self.y)

class Rectangle(object):
   def __init__(self, posn, w, h):
      self.corner = posn
      self.width = w
      self.height = h

   def __str__(self):
      return "({0},{1},{2})".format(self.corner, self.width, self.height)
   def contains(self):
      if self.x < self.width and self.y < self.height:
         return True
      else:
         return False

2 个答案:

答案 0 :(得分:0)

你必须与缩进保持一致。您在代码中混合了四个,三个和两个空格缩进。 Here's a link to PEP 8,大多数人遵循的标准风格指南。

class Point(object):
    def __init__(self, x=0, y=0):
        self.x = x
        self.y = y

    def __str__(self):
        return "({},{})".format(self.x, self.y)

class Rectangle(object):
    def __init__(self, posn, w, h):
        self.corner = posn
        self.width = w
        self.height = h

    def __str__(self):
        return "({0},{1},{2})".format(self.corner, self.width, self.height)

    def contains(self):
        if self.x < self.width and self.y < self.height:
            return True
        else:
            return False

答案 1 :(得分:0)

您的contains方法不会将某个点作为参数,只有self(这是您调用方法的矩形)。您需要添加一个参数,然后在查找该点的信息时使用它。

您可能还需要检查矩形的所有边界,因此将进行四次比较。您可以使用Python的运算符链来简化比较(a < b < c等同于a < b and b < c)。

此外,不需要if语句,您可以直接返回比较的布尔结果。

这里的代码我觉得应该适合你,虽然我可能没有正确猜到你如何处理corner值:

def contains(self, point):
    return (self.corner.x <= point.x <= self.corner.x + self.width and
            self.corner.y <= point.y <= self.corner.y + self.height)