将变量除以两个值仍然返回两个值

时间:2014-05-09 17:58:00

标签: python python-3.4

在这段代码中,我试图将变量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)错误。

对未来的任何想法,意见和建议都将受到高度赞赏。

2 个答案:

答案 0 :(得分:3)

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

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

可以说,更好的解决方案是list comprehension

[x / 20 for x in self.damage]

作为一个注释,除以20不是减少20%(它减少了95%) - 为此,你想要:

[x * 0.8 for x in self.damage]

答案 1 :(得分:1)

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

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]

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