错误:“str”和“float”的操作数类型不受支持?

2024-06-16 14:29:47 发布

您现在位置:Python中文网/ 问答频道 /正文

这段代码可以很好地找到它引用的文件中数字的平均值,但是我似乎无法让它找到标准偏差。 标准差公式为:平方根/(n1-a)^2+(n2-a)^2/m

-一切都在平方根之下我找不到它的特征

-N1,N2…..Nm=参考列表中的数字

-a=平均值

-m=列表中的总数

这是我所拥有的

def main():
    numbersFile=open("RandomNumber.txt" , 'r')

    line=numbersFile.readline()
    total=0
    numberoflines=0

    while line != "":
        numberoflines+=1
        total+=int(line)
        line=numbersFile.readline().strip()
    average=total/numberoflines
    std=line-average
    deviation=(std**2)/numberoflines


    print("The average is: " , average)
    print("The standard deviation of the numbers is: " , deviation)


main()        

Tags: the列表readlineismainline数字平均值
3条回答

看看这个关于try/exceptisdigit()question,然后 在计算偏差之前,对float进行一些强制转换,如下所示:

std=float(line)-float(average)
deviation=float((std**2))/float(numberoflines)

还要记住,您的line=numbersFile.readline()中的可能包含不是数字的字符,请仔细检查您的输入。因为您在std=line-average中使用了,并且您确信平均值是正确的,所以问题在于,而std得到了错误的值。在

要计算的正确源代码:

import math
def main():
numbersFile=open("RandomNumber.txt" , 'r')

line=numbersFile.readline()
total=0
numberoflines=0

while line != "":

    numberoflines+=1
    total+=float(line)


    line=numbersFile.readline().rstrip('\n')
numbersFile.seek(0)
average=total/numberoflines
line=numbersFile.readline()
total=0
while line !="":
    line=float(line)-average
    a=line**2
    total+=a
    line=numbersFile.readline()
std=math.sqrt(total/numberoflines)







print("The average is: " , average)

print("The standard deviation of the numbers is: " , std)


main()

您的line变量是file.readline()返回的字符串。您需要先将其转换为float,然后才能使用另一个浮点执行减法。在

更改:

std=line-average

收件人:

^{pr2}$

相关问题 更多 >