开始Python打印标准差

问题描述:

我想弄清楚我的代码有什么问题。任何人都可以修复它?开始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

你有错误了一把:

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

对于一个样本(在这里您可以与他们联系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)