我的代码如下:
def function(r):
r = 6
c = 10
p = 0
h = 0
ht = 0.2
o = 0.5
l = 7
a= [1.0,2.0,3.0]
ol = o * l * a
pp = zeros(0)
aa = zeros(0)
cc = zeros(0)
pp = append(pp,p)
aa = append(aa,a)
cc = append(cc,c)
while p >= 0 and h < 9:
h = h + ht
p = p + ol * ht
result = r * cc * ht
return result
ans = function(r)
print ans
好。我不知道由于某种原因,这个程序给了我一个TypeError。我不知道这意味着什么。请告诉我我需要做出哪些改变才能摆脱这个错误并获得打印出来的东西。错误如下:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-23-f8ae1f1b5454> in <module>()
25 return result
26
---> 27 ans = function(r)
28 print ans
<ipython-input-23-f8ae1f1b5454> in function(r)
9 l = 7
10 a= [1.0,2.0,3.0]
---> 11 ol = o * l * a
12
13 pp = zeros(0)
TypeError: can't multiply sequence by non-int of type 'float'
感谢。
答案 0 :(得分:2)
看起来你要做的是在o
之间乘以l
和a
。有两种方法可以做到:
这显式遍历列表并修改每个值,创建一个新的列表对象。
ol = [o*l*x for x in a]
map(func, interable)
这种方法与理解隐含地做同样的事情;将func
应用于iterable
的每个条目。在这个例子中,我使用lambda函数作为func
,但如果你愿意,可以去定义一个完整的函数
ol = map(lambda x: o*l*x, a)
大多数人更喜欢理解,因为他们更清晰,通常更快。这两种方法中的任何一种都应该解决您的TypeError
,但您的代码将无法满足您的需求。
您将append(pp,p)
的回复分配给列表pp
。这将使pp
等于None
,因为这就是函数返回的内容。 append()
旨在改变列表,因此您应使用pp.append(p)
将p
附加到pp
答案 1 :(得分:0)
由于您已经在使用numpy
,因此最佳解决方案是将a
转换为numpy数组。其余代码将按原样运行。
a= array([1.0,2.0,3.0])
ol = o * l * a # Vectorized because numpy
这假设您在函数调用之前已经完成了from numpy import array
。