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)