我是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],但我得到了地址。我想这就是我总是弄错的原因..我怎么能解决这个问题?
答案 0 :(得分:1)
如何使用filter
函数仅采用面积为number
def get_same_area_rects(self, number):
return filter(lambda rect: rect.area() == number, self.rectangles)
答案 1 :(得分:1)
答案 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
希望它有所帮助:)