2017-08-30 60 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) 

它可以解決平均值,但不是方差。謝謝!繼續獲取'浮動'對象不可迭代

+3

'sum((xi - Mean)** 2)'試圖對一個數字調用'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

耐心是一種美德@shadowranger - downvoting而答案正在編輯有點奇怪。 –

+0

你意識到我無法知道你在編輯它嗎?我在閱讀它時發佈了答案。 – ShadowRanger

0

代碼:

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

是不是得到正確的方式方差,因爲sum()函數的款項只有在每個循環一個號碼,讓每一個數字的總和最好的辦法是:

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)