Float 对象不可迭代,即使我使用的是范围
Float object is not iterable even though I'm using a range
我正在尝试编写一个计算二项式概率的函数(我知道 scipy.stats.binom 存在,但我不能使用它)。这是我得到的:
import math
def binomial(l,u,n,p):
for i in range(l,u):
f=sum(math.comb(n,i)*(p**i)*(1-p)**(n-i))
return(f)
但是,当我使用二项式 (0,5,10,0.25) 对其进行测试时,我收到一条错误消息“类型错误:'float' 对象不可迭代”。据我所知,当我忘记为循环使用范围时,这种情况经常发生,但在这种情况下我做了。有什么提示为什么它不起作用吗?
您的问题出在sum
的使用上。您正在将浮点数传递给 sum
。要获得预期的输出,您需要为每个循环存储 math.comb(n,i)*(p**i)*(1-p)**(n-i)
的值。
示例:
def binomial(l,u,n,p):
values = []
for i in range(l,u):
values.append(math.comb(n,i)*(p**i)*(1-p)**(n-i))
return sum(values)
或列表理解:
def binomial(l,u,n,p):
values = [math.comb(n,i)*(p**i)*(1-p)**(n-i) for i in range(l,u)]
return sum(values)
我正在尝试编写一个计算二项式概率的函数(我知道 scipy.stats.binom 存在,但我不能使用它)。这是我得到的:
import math
def binomial(l,u,n,p):
for i in range(l,u):
f=sum(math.comb(n,i)*(p**i)*(1-p)**(n-i))
return(f)
但是,当我使用二项式 (0,5,10,0.25) 对其进行测试时,我收到一条错误消息“类型错误:'float' 对象不可迭代”。据我所知,当我忘记为循环使用范围时,这种情况经常发生,但在这种情况下我做了。有什么提示为什么它不起作用吗?
您的问题出在sum
的使用上。您正在将浮点数传递给 sum
。要获得预期的输出,您需要为每个循环存储 math.comb(n,i)*(p**i)*(1-p)**(n-i)
的值。
示例:
def binomial(l,u,n,p):
values = []
for i in range(l,u):
values.append(math.comb(n,i)*(p**i)*(1-p)**(n-i))
return sum(values)
或列表理解:
def binomial(l,u,n,p):
values = [math.comb(n,i)*(p**i)*(1-p)**(n-i) for i in range(l,u)]
return sum(values)