2012-03-19 5 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

+1

トレースバック(直近の最後の呼び出し): ファイル "C:\ Python32 \ new.py"、14行目、 で、このエラーメッセージが表示されます。 メインファイルのC:\ Python32 \ new.pyの4行目 SD() ファイル "C:\ Python32 \ new.py"、行12、SD m =(float(b )/ r)** 0.5 TypeError:float()引数は文字列または数字でなければなりません – LorrJ

+1

@LorraineJane: 'b'はrで除算する数値ではないリストです.2番目にlen(b)は' 0 'b = []'として、これがあなたが意図したものかどうかを確認してください。 – avasal

答えて

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()に渡したいとしますか?あなたは配列におそらくsplit()その後、ファイルの内容とをread()、引数としてSD()に渡す必要があります

+0

ありがとう私のコードは今動作します – LorrJ

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)