如何使用for循环添加参数元素?
我使用cs1graphics模块创建了一个包含4个点(Point对象)的列表。我想通过在一个循环中每次从这个列表中取出一个点来绘制一个多边形(Polygon)。这些点需要一个个叠加在多边形上,才能把整个形状画出来。但是实际上,列表中的一个点会覆盖掉上一个循环中的点。最后,我只画出了一个点(也就是列表中的最后一个点)。我该怎么解决这个问题呢?
补充:我试过使用.append方法,但这样会把所有参数变成一个列表对象,显然我不能画列表。
self._list = [Point(200,200),Point(400,200),Point(400,400),Point(200,400),Point(200,200)]
for i in range(4):
self._poly = Polygon(self._list[i],)
4 个回答
0
我觉得你想要的是这个:
self._poly = Polygon(*self._list)
*
这个符号的作用是把列表里的内容拆开,作为单独的参数传递给函数。
你也可以直接把点的列表传进去。
self._poly = Polygon(self._list)
这样也能正常工作。
0
如果你想要一个包含前四个点的多边形,可以这样写:
self._poly = Polygon(*self._list[:4])
在你的代码里,你实际上是创建了四个多边形,每个多边形只有一个点。
0
这两种方法
self._list = [Point(200,200),Point(400,200),Point(400,400),Point(200,400),Point(200,200)]
self._poly = Polygon(self._list)
和
self._list = [Point(200,200),Point(400,200),Point(400,400),Point(200,400),Point(200,200)]
self._poly = Polygon(*self._list)
都可以用,不需要循环。
如果你还是想在循环中逐步构建一个多边形,可以这样做:
self._list = [Point(200,200),Point(400,200),Point(400,400),Point(200,400),Point(200,200)]
self._poly = Polygon()
for point in self._list:
self._poly.addPoint(point)