在python中解包一个元组并迭代它

时间:2016-01-03 17:20:02

标签: python tuples unpack

我正在尝试解包一个co-ord元组,然后迭代它以多次blit一个sprite:

def updateMap(self, playerPosition):

  self.x_coord, self.y_coord = playerPosition 

  t = Tree(self.screen)
  for x in range(self.x_coord):
    for y in range(self.y_coord):
      self.screen.fill((0,104,0))
      t.drawTree((x, y))

但是我收到以下错误:

File "unnamed.py", line 26, in updateMap
  for x, y in range(self.x_coord), range(self.y_coord):
ValueError: need more than 0 values to unpack

感谢有人能以正确的方式指引我朝着正确的方向前进。谢谢。

编辑:我已经编辑了上面的代码来迭代每个坐标,如果playerPostion是0.5,那么迭代变为(0,1)(0,2)(0,3)(0,4)( 0,5) - 但是虽然我没有收到任何错误,但似乎没有正确绘制树。谢谢..它似乎是答案,除了我的编码是错误的。

4 个答案:

答案 0 :(得分:1)

我认为这就是你想要的:

from itertools import product

self.x_coord, self.y_coord = playerPosition #playerPosition is a tuple

t = Tree(self.screen)
for x,y in product(range(self.x_coord+1), range(self.y_coord+1)):
    self.screen.fill((0,104,0))
    t.drawTree((x, y))

答案 1 :(得分:0)

也许你改变了:

self.x_coord = 0 
self.y_coord = 0 
playerPosition = self.x_coord, self.y_coord

为:

self.x_coord, self.y_coord = playerPosition

然后你将玩家的位置x和y输入到self.x_coord和self.y_coord

要遍历x和y的每个组合,你需要在y范围内的y范围内放置一个循环

for x in range(self.x_coord):
    for y in range(self.y_coord):
        self.screen.fill((0,104,0))
        t.drawTree((x, y))

答案 2 :(得分:0)

我认为OP希望迭代X坐标的范围和Y坐标的范围,以便为每种情况创建(x,y)。

for x in range(self.x_coord):
    for y in range(self.y_coord):
        print(x, y)

答案 3 :(得分:0)

使用内置的Python zip函数,假设两个迭代的长度相同。如果没有,那么您需要先进行一些消毒,然后再确保它们。

for x, y in zip(range(self.x_coord), range(self.y_coord))