2012-03-19 112 views
1

我想弄清楚我的代碼有什麼問題。任何人都可以修復它?開始Python打印標準差

def main(): 
    fname = input("Enter filename:") 
    infile = open(fname, "r") 
    SD() 

def SD(): 
    b= [] 
    a = 5.0 
    r = len(b) 
    for n in range(r-1): 
     b.append((r[n] -a)**2) 
    m = (float(b)/r)**0.5 
    print("The standard deviation is", m) 
main() 
+1

什麼讓你覺得有問題? (你得到什麼輸出,你期望得到什麼?) – mfrankli 2012-03-19 04:20:12

+1

我得到了這個錯誤信息:Traceback(最近調用最後一次): 文件「C:\ Python32 \ new.py」,第14行,在 文件「C:\ Python32 \ new.py」,第12行,在SD 中m =(float(b()) 文件「C:\ Python32 \ new.py」,第4行,主要爲 SD() )/ r)** 0.5 TypeError:float()參數必須是字符串或數字 – LorrJ 2012-03-19 04:22:02

+1

@LorraineJane:'b'是一個列表,不是一個數除以r,其次,len(b)將爲0 'as'b = []',請檢查您是否打算這麼做。 – avasal 2012-03-19 04:26:07

回答

5

你有錯誤了一把:

def SD(): 

    # b is empty 
    b= [] 
    a = 5.0 

    #this will always be 0 
    r = len(b) 

    # range(r-1) == [] because it is range(-1) 
    # whole loop is skipped 
    for n in range(r-1): 
     b.append((r[n] -a)**2) 

    # float(b) should throw an error, maybe sum(b) ? 
    m = (float(b)/r)**0.5 
    print("The standard deviation is", m) 
main() 

b是一個列表;你不能將一個列表轉換成一個浮點數。

也許你想傳遞一個數組到SD()?你應該read()文件內容,那麼也許split()是到一個數組中,並把它傳遞給SD()作爲參數

+0

謝謝我的代碼現在可以工作 – LorrJ 2012-03-19 23:34:19

1

對於一個樣本(在這裏您可以與他們聯繫int()):

def SD(numList): 
    cntN=len(numList) 
    sumN=0 
    for i in numList: 
     sumN+=i 
    avgVal=float(sumN)/float(cntN) 
    sumVar=0.0 
    for i in range(cntN): 
     sumVar+=float((numList[i]-avgVal)**2) 
    return ((float(sumVar)/float((cntN-1)))**0.5)