我有点迷失为什么会抛出这个typeError。
Traceback (most recent call last):
File "<pyshell#19>", line 1, in <module>
evaluate_poly(polyTestTwo,-13)
File "C:\Users\robert\Desktop\programming\MIT open courseware\ps2\ps2_newton.py", line
22, in evaluate_poly
valHolder+=((poly[i]*x)**i)
TypeError: tuple indices must be integers
这是我的代码:
def evaluate_poly(poly, x):
"""
Computes the polynomial function for a given value x. Returns that value.
Example:
>>> poly = (0.0, 0.0, 5.0, 9.3, 7.0) # f(x) = 7x^4 + 9.3x^3 + 5x^2
>>> x = -13
>>> print evaluate_poly(poly, x) # f(-13) = 7(-13)^4 + 9.3(-13)^3 + 5(-13)^2
180339.9
poly: tuple of numbers, length > 0
x: number
returns: float
"""
valHolder=0.0
for i in poly:
valHolder+=((poly[i]*x)**i)
i=i+1
if i==(len(poly))-1:
return float(valHolder)
break
我为获得此特定错误而输入的输入如下。
>>>polyTest=(0.0,0.0,5.0,9.3,7.0)
>>>evaluate_poly(polyTest,-13)
知道是什么原因引起的吗?我认为元组可能有浮动作为值?
答案 0 :(得分:4)
您的循环for i in poly
会迭代poly
的值,而不是索引。
如果您需要索引,请使用enumerate()
函数添加这些索引;你得到索引和你的循环中的值:
def evaluate_poly(poly, x):
valHolder = 0.0
for i, value in enumerate(poly):
valHolder += (value * x) ** i
return valHolder
您也不需要在此处测试循环的结尾,也不需要将结果转换为浮点数;它已经是浮动了。