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

时间:2018-07-18 12:29:40

标签: python python-3.x

此代码可以完美地找到它引用的文件中数字的平均值,但是我似乎无法找到它的标准偏差。 标准差方程为:平方根/(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()        

3 个答案:

答案 0 :(得分:2)

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

更改:

std=line-average

收件人:

std=float(line)-average

答案 1 :(得分:0)

在此之后,请查看有关{strong> try / except 和 isdigit()question 在计算偏差之前先进行一些转换,例如:

books = Book.query.filter_by(deleted=False). \
    outerjoin(Invoice, (Invoice.book_id == Book.id) & (Invoice.settled == True)). \
    group_by(Book.id)

还请记住,std=float(line)-float(average) deviation=float((std**2))/float(numberoflines) 中的可能包含非数字字符,请仔细检查您的输入。由于您在line=numbersFile.readline()中使用 line ,并且确定知道平均值是正确的,因此问题出在 line std 获取了错误的值。

答案 2 :(得分:0)

要计算的正确源代码:

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()