2013-12-10 35 views
0

我得到TypeError:'float'對象沒有屬性'getitem'爲我的while語句如下。我不確定在這種情況下問題是什麼。我在代碼中使用SYSTypeError:'float'對象在while語句中沒有屬性'__getitem__'

s1P = 4.51775*10.0**16.0 
ii= 1 
while s1P[ii-1] > 0.0 
    sys.stdout.write('\rstep={0}'.format(ii)) 
    sys.stdout.flush() 

    Rad = s1r[ii-1]+delrms1[ii-1]*delm 
    Mas = s1m[ii-1]*[i] 
    Pres = s1P[ii-1]+delPms1[ii-1]*delm 
    lPres = np.log10(Pres) 
    Temp = s1T[ii-1]+delTms1[ii-1]*delm 
    lTemp = np.log10(Temp) 
    Lum = s1L[ii-1]+deLms1[ii-1]*delm 

    Rho = (Pres - 1.0/3.0*a*Temp**4.0)*mu/(NA*k*Temp) 
    lRho = np.log10(Rho) 
    lR = np.log10(10.0**lRho/(10.0**Temp/10.0**6)**3.0) 
    lK = interpolate.bisplev(lTemp,lR,tck) 
    K = 10.0**lK 
    T_n = Temp/(10.0**9.0) 
    epp = 2.4*10.0**4.0*(Rho*X**2.0/T_n**(2.0/3.0))*np.exp(-3.38/T_n**(1.0/3.0)) 
    ecno = 4.4*10.0**25.0*(Rho*X*Z/T_n**(2.0/3.0))*np.exp(-15.228/T_n**(1.0/3.0)) 
    eta = 5.0*10.0**8.0*(Rho**2.0*Y**3.0/T_n**3.0)*np.exp(-4.4/T_n) 
    ec = epp+ecno+eta 
    Bt = NA*k*Rhoc*T_n/(Pres*mu) 
    Gam2 =(32.0-24.0*Bt-3.0*Bt**2.0)/(24.0-18.0*Bt-3.0*Bt**2.0) 
    drm = 1.0/(4.0*np.pi*Rad**2.0*Rho) 
    dPm = -G*Mas*1.99*10.0**33.0/(4.0*np.pi*Rad**4.0) 
    dLm = eg 

    Term1 = 16.0*np.pi*a*c*G/(3.0*K) 
    Term2 = (1.0-1.0/Gam2) 
    Term3 = Temp**4.0*(Mas*1.99*10.0**33.0)/Pres 
    Tal = Term1+Term2+Term3 
    CR = Lum/Tal 
    dTrm = -3.0*s1K*s1L/(64.0*np.pi**2.0*a*c*s1r**4.0*s1T**3.0) 
    dTcm = -(1.0-1.0/s1gam2)*(G*s1m*1.99*10.0**33.0*s1T/(4.0*np.pi*s1r**4.0*s1P)) 
    dTm = np.where(Lum > Tal, dTcm, dTrm) 

    sys.stdout.write('\n') 
    s1m.append(Mas) 
    s1r.append(Rad) 
    s1L.append(Lum) 
    r_c.append(CR) 
    s1T.append(Temp) 
    logs1T.append(lTemp) 
    s1P.append(Pres) 
    logs1P.append(lPres) 
    s1rho.append(Rho) 
    logs1rho.append(lRho) 
    logs1K.append(lK) 
    slK.append(K) 
    s1eg.append(ec) 
    s1gam2.append(Gam2) 
    delrms1.append(drm) 
    delPms1.append(dPm) 
    delLms1.append(dLm) 
    delTm1.append(dTm) 
    ii = ii+1 

sys.stdout.write('\n') 

s1m=s1m[:-1] 
s1r=s1r[:-1] 
s1L=s1L[:-1] 
r_c=r_c[:-1] 
s1T=s1T[:-1] 
logs1T=logs1T[:-1] 
s1P=s1P[:-1] 
logs1P=logs1P[:-1] 
s1rho=s1rho[:-1] 
logs1rho=logs1K[:-1] 
logs1K=logs1K[:-1] 
slK=s1K[:-1] 
s1eg=s1eg[:-1] 
s1gam2=s1gam2[:-1] 
delrms1=delrms1[:-1] 
delPms1=delPms1[:-1] 
delLms1=delLms1[:-1] 
delTm1=delTm1[:-1] 

從追加我的語句的輸出可能仍然是一個問題?

+2

請告訴我們在哪兒's1P'定義,並請包括一個完整的堆棧跟蹤。 – bdesham

+1

什麼是你想與完成'而S1P [II-1]> 0.0'? 's1P'只是一個數字,它沒有任何意義,試圖訪問一個元素(這是什麼'[II-1]'一樣)。 – bdesham

+0

我編輯了什麼s1P。是的,它是一個數字,但這個while語句應該對SLP追加新的價值觀和停止,如果S1P的> 0.0。至少,這是我的目標。 – user1821176

回答

2

如果s1P應該是數字的列表那麼你需要初始化它像

s1P = [4.51775*10.0**16.0] 

代替s1P = 4.51775*10.0**16.0,這將使其成爲一個單一的數字。

+0

謝謝號碼列表,我忘了值初始化成一個列表。現在錯誤消失了。 – user1821176

相關問題