我正在用python编写一个文本冒险代码。我有一个治安官NPC,它对player.inventory中的所有item.name == "dead goblin"对象进行计数,如果item.name == "dead goblin",则该项将从列表中删除,并从goblins_taken += 1中删除
if "sheriff" in player.action and "talk" in player.action and player.location == sheriff:
goblins_taken = 0
for item in player.inventory:
if item.name == "dead goblin":
goblins_taken += 1
player.inventory.remove(item)
write("The sheriff says, 'Good job. You have killed " + str(goblins_taken) + " goblins!")这个代码的问题在于,如果玩家杀死了两个妖精,治安官会说玩家杀死了一个妖精,而不是两个。
我试图简化空闲中的问题,并意识到这是一个索引问题:
>>> foo = ['a', 'b', 'c', 'd', 'e']
>>> foo[2]
'c' # With b
>>> foo.remove('b')
>>> foo[2]
'd' # Without b, index is shifted down是否有比list.remove()更好的从列表中删除项的方法?还是有办法解决这个问题?
发布于 2017-11-21 18:53:28
您不应该修改您正在迭代的列表!您可以通过创建第二个列表来解决这个问题:
temp_inventory = list(player.inventory)
for item in player.inventory:
if item.name == "dead goblin":
goblins_taken += 1
temp_inventory.remove(item)
player.inventory = temp_inventory这是我尝试过的,也成功了:
a = [1,2,3,2,1]
b = list(a)
elems_removed = 0
for elem in a:
if elem == 2:
elems_removed += 1
b.remove(elem)
print(a)
print(b)
a=b
print(a)
print(elems_removed)https://stackoverflow.com/questions/47420544
复制相似问题