我正在尝试替换一个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)
答案 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