我需要在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)
当我尝试运行它时,程序崩溃了。请帮帮我!!
答案 0 :(得分:4)
str(self)
调用self.__str__
,它将委托给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
功能。