带有两个迭代器Python的for循环的ValueError

时间:2014-08-18 21:47:23

标签: python for-loop

我正在尝试替换一个if / elif语句块,这些语句与for循环非常相似,它会改变一个for循环的条件几次。

我原来的if / elif语句是针对我正在编码的RPG的项目系统。每种类型的商品只能进入库存的某些位置。

def PickUpItem(self):#根据类型将项目添加到空间中的库存

if self.Type == 1 and not Inventory[0]: #Type 1 is a weapon type, 2 is for shields, etc.
        Inventory[0] = self #Sets the weapon inventory slot to the object

    elif self.Type == 2 and not Inventory[1]:
        Inventory[1] = self

    elif self.Type == 3 and not Inventory[2]:
        Inventory[2] = self

所以,这里是我试图替换前一个代码的代码,以便它将检查每个if / elif语句的条件对:

def PickUpItem(self):
   for i, j in range(1, 4), range(3):
        if self.Type == i and not Inventory[j]:
            Inventory[j] = self

我认为这应该有用,但我收到错误:

    for i, j in range(1, 4), range(0, 3):
ValueError: too many values to unpack (expected 2)

2 个答案:

答案 0 :(得分:1)

您要找的是zip

for i, j in zip(range(1, 4), range(0, 3)):

原因(正如您在交互式终端中确认的那样)zip(range(1, 4), range(0, 3))的值为[(1, 0), (2, 1), (3, 2)]

然而,请注意您的代码可以更容易地编写为

if not Inventory[self.Type - 1]:
    Inventory[self.Type - 1] = self

答案 1 :(得分:0)

您可以在循环中设置j = i - 1

for i in range(1,4):
    j = i - 1
    if self.Type == i and not Inventory[j]:
        Inventory[j] = self