【问题标题】:Sum of sines functions - Type error float object is not iterable正弦函数之和 - 类型错误浮点对象不可迭代
【发布时间】:2021-07-14 17:38:15
【问题描述】:

我正在尝试开发一个计算正弦和的函数。

我尝试的第一个函数是:

def S(t,n,T):
    return (4/pi)*sum((1/(2*i-1))*sin(2*(2*i-1)*pi*t/T) for i in range(1,n+1))

然后当我使用以下参数调用函数时,我得到了0.2381 的答案:

S(0.01*2*pi,3,2*pi)

由于我对 Python 比较陌生,因此我尝试将此代码修改为:

def S1(t1,n1,T1):
    
    s1 = 0
    
    for i in range(1,n1+1):
        s1 = s1 + (4/pi)*sum((1/(2*i-1))*sin(2*(2*i-1)*pi*t1/T1))
    return s1

但是当我使用相同的参数调用函数 S1 时,我收到一条错误消息:

TypeError: 'float' object is not iterable. 

有人可以解释这是为什么吗?我查看了与此 TypeError 相关的其他一些答案,但我不明白。

【问题讨论】:

  • 你希望从sum((1/(2*i-1)) ...得到什么?
  • 您可能只想摆脱 sum(),因为您在 for 循环中明确求和。
  • 欢迎来到 SO;如果下面的某个答案解决了您的问题,请接受 - 请参阅 What should I do when someone answers my question?

标签: python typeerror iterable


【解决方案1】:

答案很简单:sum() 需要一个可迭代的参数,而在 S1 中,您传递的是一个浮点数。

S() 中它运行良好,因为使用for i in... 构建了一个集合,然后将其传递给sum(),而在第二种情况下,您正在修复i 并获得一个浮点数以传递给sum()循环。

【讨论】:

  • 您好,感谢您的回答。我感谢那些帮助我学习并希望能及时做出贡献的回复。
【解决方案2】:

函数sum() 需要一个可迭代作为参数,但在S1 中,您传递给它一个浮点数。

解决办法如下:

def S1(t1, n1, T1):
    results = []
    for i in range(1, n1 + 1):
        results.append((1 / (2 * i - 1)) * sin(2 * (2 * i - 1) * pi * t1 / T1))
    return (4 / pi) * sum(results)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 2017-03-05
    • 2021-03-02
    • 2020-04-18
    • 1970-01-01
    • 2022-12-06
    • 2012-08-24
    相关资源
    最近更新 更多