首页 > 解决方案 > 即使我使用的是范围,浮点对象也是不可迭代的

问题描述

我正在尝试编写一个计算二项式概率的函数(我知道 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)对其进行测试时,我收到一条错误消息“TypeError:'float' object is not iterable”。据我所知,如果我忘记使用循环范围但我在这种情况下这样做了,这会发生很多。任何提示为什么它不起作用?

标签: pythonfunctionfor-looprange

解决方案


您的问题在于使用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)

推荐阅读