【问题标题】:Datatype definition - TypeError数据类型定义 - TypeError
【发布时间】:2019-03-29 08:31:51
【问题描述】:
import cmath
import math
import random
import time

P = []
V = []
Vin = []

def Compute_wn_win(n,V,Vin):
    for i in range (0,n):
        V.append(complex(math.cos(2*math.pi*i/n),math.sin(2*math.pi*i/n)))
        Vin.append(1/(complex(math.cos(2*math.pi*i/n),math.sin(2*math.pi*i/n))))    

Compute_wn_win(8,V,Vin)

for i in range(0,8):
    random_number = random.uniform(-1.0,1.0)
    P.append(random_number)

def FFT(P,V,n):
    if(n==1):
        return P[0]
    else:
        Peven = []
        Podd = []
        for i in range(0,n/2):
            Peven.append(P[2*i])
            Podd.append(P[(2*i)+1])
        Vsquared = []
        for i in range(0,n/2):
            Vsquared.append(V[i]*V[i])
        Sole = FFT(Peven,Vsquared,n/2)
        Solo = FFT(Podd,Vsquared,n/2)
        Sol = [0 for x in range(0,n)]
        for i in range(0,n/2):
            Sol[i] = Sole[i]+V[i]*Solo[i]
            Sol[i+n/2] = Sole[i]-V[i]*Solo[i]
        return Sol
Sol = FFT(P,V,8)

我是 Python 新手。我有以下代码。但是,对于 Sole = FFT(Peven,Vsquared,n/2)Sol[i] = Sole[i]+V[i]*Solo[i] 行,我收到以下错误。但是,我已将 Sole、Solo 和 Sol 定义为列表数据类型,所以我不明白为什么它提到 float 数据类型没有属性 getitem

确切的错误是

Traceback (most recent call last):
  File "/Users/globetrekker/Documents/CS5050/Assignment7/Test_py.py", line 40, in <module>
    Sol = FFT(P,V,8)
  File "/Users/globetrekker/Documents/CS5050/Assignment7/Test_py.py", line 33, in FFT
    Sole = FFT(Peven,Vsquared,n//2)
  File "/Users/globetrekker/Documents/CS5050/Assignment7/Test_py.py", line 33, in FFT
    Sole = FFT(Peven,Vsquared,n//2)
  File "/Users/globetrekker/Documents/CS5050/Assignment7/Test_py.py", line 37, in FFT
    Sol[i] = Sole[i]+V[i]*Solo[i]
TypeError: 'float' object has no attribute '__getitem__'

【问题讨论】:

  • 看起来您正在尝试对范围进行列表理解。但是您将浮点数作为范围的第二个参数传递。 for i in range(0,n/2):。 n/2 并不总是整数。它抛出错误TypeError float can not be interpreted as an integer
  • 你能编辑这个并添加你得到的确切错误吗?我看不到您尝试在哪里使用 getitem

标签: python


【解决方案1】:

SoleSolo 是对FFT() 的递归调用的返回值,但FFT() 的基本情况(当n == 1)返回一个浮点数,而不是一个列表,所以基数之上的步骤case 将通过尝试索引浮点数而失败。据推测,您想将基本情况下的return P[0] 更改为return [P[0]]

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    相关资源
    最近更新 更多