0

我需要在 2D 中定义一类多边形。由元组(坐标)列表定义的每个多边形,例如:

poly = [(0.5,0),(1,0.5),(0.5,1),(0,0.5)]

(不需要排序) 点从最左边的点开始顺时针排序。

我的任务是正确定义这个类 __init____repr__ 并且 is_inside(self, q)检查天气点的函数在多边形内。

__repr__方法假设打印'[(0.5,0),(1,0.5),(0.5,1),(0,0.5)]'

到目前为止,这就是我所拥有的:

class Polygon2D:
    def __init__(self, pts):
        for index in range(len(pts)):
            self.index = pts[index]
    def __repr__(self):

        return str(self)

当我尝试运行它时,程序崩溃了。请帮我!!

4

1 回答 1

4

str(self)调用which 将在您的实现中self.__str__委托which 调用,再次开始整个循环。所以是的,你导致了无限递归。self.__repr__str(self)

但是,您更直接的问题是存储pts列表。您只存储最后一点,丢弃其余点。在循环中分配到self.index只会导致最后一个分配获胜。

只需pts直接存储,作为属性,然后将转换为字符串作为结果__repr__

class Polygon2D:
    def __init__(self, pts):
        self.points = pts

    def __repr__(self):
        return str(self.points)

存储完整的点列表也可以实现您的is_inside功能。

于 2015-05-18T13:03:05.740 回答