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

Unpacking a tuple in python and iterating over it

我正在尝试解压缩一个协调元组,然后对其进行迭代以多次 blit 一个精灵:

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) -- 但是虽然我没有收到任何错误,但似乎树没有正确绘制。谢谢..这似乎是答案,除了我的编码是错误的。

我认为这是你想要的:

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))

也许如果你改变:

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 的每个组合,您需要在 x 范围内的循环内放置一个 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))

我认为 OP 想要遍历 X co-ordinates 的范围和 Y co-ordinates 的范围来为每种情况创建一个 (x,y)。

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

使用内置的 Python zip 函数,假设两个可迭代对象的长度相同。如果不是,那么您需要先进行一些消毒以确保它们是正确的。

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