【问题标题】:Float object is not iterable even though I'm using a range即使我使用的是范围,浮点对象也是不可迭代的
【发布时间】:2021-09-09 15:16:37
【问题描述】:

我正在尝试编写一个计算二项式概率的函数(我知道 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”。据我所知,如果我忘记使用循环范围但我在这种情况下这样做了,这会发生很多。任何提示为什么它不起作用?

【问题讨论】:

    标签: python function for-loop range


    【解决方案1】:

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

    【讨论】:

    • 或者只是将生成器放在sum()的参数中
    猜你喜欢
    • 2020-03-26
    • 1970-01-01
    • 2019-10-06
    • 2012-08-24
    • 2019-04-24
    • 2016-02-24
    • 2012-07-15
    • 1970-01-01
    相关资源
    最近更新 更多