在这段代码中,我试图将变量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)
错误。
对未来的任何想法,意见和建议都将受到高度赞赏。
答案 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)
您不希望使用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]
列表和元组与使用非常相似,因此使用哪一个并不重要。