python类矩形新类型

时间:2014-04-03 04:08:51

标签: python class

我是python的新手,我正在尝试编写类RectangleCollection。给出了Rectangle类,我需要编写类RectangleCollection部分。 class RectangleCollection有一个列表实例变量,矩形,最初应该引用一个空列表。 get_same_area_rects将一个数字作为参数,并返回具有该区域的矩形列表中所有矩形的列表。

class Rectangle:

""" A rectangle with a width and height. """

def __init__(self, w, h):
    """ (Rectangle, number, number)

    Create a new rectangle of width w and height h.

    >>> r = Rectangle(1, 2)
    >>> r.width
    1
    >>> r.height
    2
    """

    self.width = w
    self.height = h

def area(self):
    """ (Rectangle) -> number

    Return the area of this rectangle.
    >>> r = Rectangle(10, 20)
    >>> r.area()
    200
    """

    return self.width * self.height

这些就是我所做的:

class RectangleCollection:

    def __init__(self):
    """ (RectangleCollection) -> NoneType

    >>> rc = RectangleCollection()
    >>> rc.rectangles
    []
    """

    self.rectangles = []

    def get_same_area_rects(self, number):

    """
    >>>rc = RectangleCollection()
    >>>r1 = Rectangle(10, 20)
    >>>r2 = Rectangle(15, 20)
   >>> r3 = Rectangle(20, 10)
    >>>rc.rectangles.extend([r1, r2, r3])
    >>>res = rc.get_same_area_rects(200)
    >>>res == [r1, r3]
    True

    """
    self.number = number

    a = self.rectangles.expend(self.area())
    if number == self.rectangles.area():
        return True

    return False

但是对于get_same_area_rects部分,我总是得到False .. 我不知道我做错了什么。请帮忙

我认为这是因为rc.rectangles给了我r1,r2,r3地址,而不是区域。我应该得到[200,300,200],但我得到了地址。我想这就是我总是弄错的原因..我怎么能解决这个问题?

4 个答案:

答案 0 :(得分:1)

如何使用filter函数仅采用面积为number

的矩形
def get_same_area_rects(self, number):
    return filter(lambda rect: rect.area() == number, self.rectangles)

答案 1 :(得分:1)

CSC108对不对?类中的这个函数不要求你返回True的False,它要求你调用这个函数来得到一个区域为200的矩形列表

答案 2 :(得分:0)

您的代码中存在排版错误。它应该是:

extend而非expend如下:

a = self.rectangles.extend(self.area())
if number == self.rectangles.extend(self.area()):
    return True

或者简单地说:

a = self.rectangles.extend(self.area())
if number == a:
    return True

答案 3 :(得分:0)

您必须创建一个临时列表,然后循环遍历矩形。这是因为我们必须返回一个具有相同区域的列表,我们需要使用rectangle.area()来比较它们是否为真,然后添加到列表中。

def get_same_area_rects(self, number):
    temp_list = []
    for rectangle in self.rectangles:
        if number == rectangle.area():
            temp_list.append(rectangle)
    return temp_list

希望它有所帮助:)