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