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