0

在这段代码中,我试图将变量self.damage除以 20:

self.damage = map(lambda x: x/20, self.damage)
...
...
print("\nPICKAPOO's DAMAGE RATING WAS DECREASED BY 20%")
print("PICKAPOO's DAMAGE RATING IS NOW {}".format(str(self.damage)))
...
return self.damage

当我运行它时,我得到了这个奇怪的错误:

PICKAPOO's DAMAGE RATING WAS DECREASED BY 20%
PICKAPOO's DAMAGE RATING IS NOW <map object at 0x0000000002CB1128>

如果我尝试任何其他代码而不是我所拥有的代码,它会返回相同的TypeError: unsupported operand type(s)错误。

对未来的任何想法、意见和建议将不胜感激。

4

2 回答 2

3

在 Python 3.x 中,map()返回一个可迭代的,而不是一个列表。如果您想要一个列表,请使用list(map(...)).

正常的用例只是迭代它,你可以像它是一个列表一样做。

可以说,这里更好的解决方案是列表理解

[x / 20 for x in self.damage]

需要注意的是,除以 20 并不是减少 20%(而是减少 95%)——要做到这一点,您需要:

[x * 0.8 for x in self.damage]
于 2014-05-09T18:00:29.847 回答
1

你不想用map这个。map将函数应用于列表中的每个元素,而您只是尝试进行简单的除法。只需使用

self.damage = self.damage / 20

但是,根据您的文本,您试图将其减少 20%,这完全是一个不同的公式:

self.damage = self.damage * (1 - 20 / 100)

编辑

知道这self.damage是一个代表伤害范围的元组会有所帮助。这是一个可以将其减少x% 的函数:

self.damage = tuple(damageValue * (1 - x/100) for damageValue in self.damage)

如果您不关心将其保留为元组,则可以使用列表推导:

self.damage = [damageValue * (1 - x/100) for damageValue in self.damage]

列表和元组在使用上非常相似,因此使用哪一个可能并不重要。

于 2014-05-09T18:00:42.663 回答