2017-08-30 13 views
0
numbers = [] 

while True: 
    n = float(input("Enter a number: ")) 
    if n < 0: 
     break 
    numbers.append(n) 
    Mean = sum(numbers)/len(numbers) 

    for xi in numbers: 
     var = sum((xi - Mean) ** 2) 
     if len(numbers) == 1: 
      Variance = var 
     else: 
      Variance = var/(len(numbers) - 1) 
    print(Mean, Variance) 

平均値は解決しますが、分散は解決しません。ありがとう!'float'オブジェクトは反復可能ではありません。

+3

'sum((xi-Mean)** 2)'は1つの数値に対して 'sum'を呼び出そうとしています。 – user2357112

+0

ループ内でsum関数を使用したのはなぜですか?目的は何ですか? – crook

答えて

1

あなたのvarの実装が間違っているので、最初に値を計算してからループの外側に分割する必要があります。 (あなたがそれをしない使用合計()関数は、それが一緒にシーケンスの要素を追加しようとします。)

numbers = [] 

while True: 
    n = float(input("Enter a number: ")) 
    if n < 0: 
     break 
    numbers.append(n) 
    Mean = sum(numbers)/len(numbers) 
var = 0 
for xi in numbers: 
    var += (xi - Mean) ** 2 

if len(numbers) == 1: 
    Variance = var 
else: 
    Variance = var/(len(numbers) - 1) 

print(Mean, Variance) 
+0

説明?修正を指摘せずにコードを修正するのはちょっと奇妙です。 – ShadowRanger

+0

忍耐は美徳@影の辺りです - 答えが編集されている間にダウンボートするのはちょっと奇妙です。 –

+0

あなたはそれを編集していることを知る方法がないと思いますか?私はそれを読む時に投稿された答えに投票します。 – ShadowRanger

0

あなたのコード:

var = sum((xi-Mean)**2) 

を取得するための正しい方法ではありません各ループ内の和()関数の和が唯一の数は、すべての数の合計を取得するための最良の方法であるため、分散、:

var += (xi - Mean) ** 2 

ので、コードは次のようになります。

while True: 
    n = float(input()) 
    if n < 0: 
     break 
    numbers.append(n) 
    Mean = sum(numbers)/len(numbers) 
    var = 0 
    for xi in numbers: 
     var += (xi-Mean)**2 
    if len(numbers) == 1: 
     Variance = var 
    else: 
     Variance = var/(len(numbers)-1) 
    print(Mean, Variance) 
関連する問題