不能将序列乘以“浮点”类型的非整数
Posted
技术标签:
【中文标题】不能将序列乘以“浮点”类型的非整数【英文标题】:can't multiply sequence by non-int of type 'float' 【发布时间】:2011-04-06 10:58:56 【问题描述】:为什么我会收到“无法将序列乘以'float'类型的非整数”的错误?来自以下代码:
def nestEgVariable(salary, save, growthRates):
SavingsRecord = []
fund = 0
depositPerYear = salary * save * 0.01
for i in growthRates:
fund = fund * (1 + 0.01 * growthRates) + depositPerYear
SavingsRecord += [fund,]
return SavingsRecord
print nestEgVariable(10000,10,[3,4,5,0,3])
【问题讨论】:
我更喜欢SavingsRecord.append(fund)
而不是你的SavingsRecord += [fund,]
,它可能会更快。
Why do I get TypeError: can't multiply sequence by non-int of type 'float'?的可能重复
@StephanWeinhold ,该帖子的日期为 2012 年。此问题发布于 2010 年。
@raoulbia 对不起!恐怕我把身份证弄混了。感谢您的关注!
【参考方案1】:
您将“1 + 0.01”乘以 growthRate 列表,而不是您正在迭代的列表中的项目。我已将 i
重命名为 rate
并改用它。请参阅下面的更新代码:
def nestEgVariable(salary, save, growthRates):
SavingsRecord = []
fund = 0
depositPerYear = salary * save * 0.01
# V-- rate is a clearer name than i here, since you're iterating through the rates contained in the growthRates list
for rate in growthRates:
# V-- Use the `rate` item in the growthRate list you're iterating through rather than multiplying by the `growthRate` list itself.
fund = fund * (1 + 0.01 * rate) + depositPerYear
SavingsRecord += [fund,]
return SavingsRecord
print nestEgVariable(10000,10,[3,4,5,0,3])
【讨论】:
SO 真是太棒了……只有 11 次浏览,一分钟内就有 5 个正确答案。【参考方案2】:for i in growthRates:
fund = fund * (1 + 0.01 * growthRates) + depositPerYear
应该是:
for i in growthRates:
fund = fund * (1 + 0.01 * i) + depositPerYear
您将 0.01 与 growthRates 列表对象相乘。将列表乘以整数是有效的(它是重载的语法糖,允许您使用其元素引用的副本创建扩展列表)。
例子:
>>> 2 * [1,2]
[1, 2, 1, 2]
【讨论】:
【参考方案3】:在这一行:
fund = fund * (1 + 0.01 * growthRates) + depositPerYear
growthRates 是一个序列 ([3,4,5,0,3]
)。您不能将该序列乘以浮点数 (0.1)。看起来你想放在那里的是i
。
顺便说一句,i
不是该变量的好名称。考虑一些更具描述性的内容,例如 growthRate
或 rate
。
【讨论】:
@All:感谢您的及时回复。 @Nathon:我很高兴您对变量名发表了评论。学习编程时,从一开始就掌握语法规则很重要。【参考方案4】:Python 允许您将序列相乘以重复它们的值。这是一个视觉示例:
>>> [1] * 5
[1, 1, 1, 1, 1]
但它不允许你用浮点数来做:
>>> [1] * 5.1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't multiply sequence by non-int of type 'float'
【讨论】:
【参考方案5】:在这一行:
fund = fund * (1 + 0.01 * growthRates) + depositPerYear
我认为你的意思是:
fund = fund * (1 + 0.01 * i) + depositPerYear
当您尝试将 float 乘以 growthRates(这是一个列表)时,您会收到该错误。
【讨论】:
【参考方案6】:因为growthRates 是一个序列(你甚至在迭代它!)并且你将它乘以(1 + 0.01),这显然是一个浮点数(1.01)。我猜你的意思是for growthRate in growthRates: ... * growthrate
?
【讨论】:
以上是关于不能将序列乘以“浮点”类型的非整数的主要内容,如果未能解决你的问题,请参考以下文章
将浮点数乘以 Python 中的函数并且无法将序列乘以“浮点”类型的非整数
TypeError:不能将序列乘以“str”类型的非整数 - 将两列相乘后
TypeError:不能将序列乘以“float”类型的非整数(python 2.7)