gpt4 book ai didi

python : ZeroDivisionError: float division by zero

转载 作者:太空宇宙 更新时间:2023-11-04 03:39:10 26 4
gpt4 key购买 nike

我有这些代码,但它给出了零除法错误。我无法弄清楚出了什么问题。我需要你的帮助。谢谢。 :)

from math import sqrt

def inisialisasi():
filename = raw_input('File will be read? ')
return filename


def readdatafile(filename):
datafile = open('kalibration.txt','r')
datax = []; datay = []; datae = []; i = 0
for row in datafile:
i +=1
data = row.split()
x = float(data[0])
datax.append(x)
y = float(data[1])
datay.append(y)
e = float(data[2])
datae.append(e)
print 'x = %5.2f y = %5.2f e = %5.2f' % (x, y, e)

datafile.close()
n = i
print 'Jumlah data = ', n
return n, datax, datay, datae


def regresilinear(x, y, e):
sum1=0.0; sum2=0.0; sum3=0.0; sum4=0.0; sum5=0.0
for i in range(0, n):
sum1=sum1+(x[i]**2/e[i]**2)
sum2=sum2+(y[i]/e[i]**2)
sum3=sum3+(x[i]/e[i]**2)
sum4=sum4+(x[i]*y[i])/e[i]**2
sum5=sum5+1/e[i]**2

det = (sum5*sum1)-sum3**2
#parameter a dan b
a = ((sum1*sum2)-(sum3*sum4))/det
b = ((sum5*sum4)-(sum3)*(sum2))/det
#ralat
sigmaa2 = sum1/det
sigmab2 = sum5/det
sigmaa = sqrt(sigmaa2)
sigmab = sqrt(sigmab2)

return a, b, sigmaa, sigmab

filename = inisialisasi()
n, datax, datay, datae = readdatafile(filename)

a, b, sigmaa, sigmab = regresilinear(datax,datay, datae)

print 'a= %8.6f b= %8.6f sigmaa= %8.6f sigmab= %8.6f' % (a, b, sigmaa, sigmab)

错误:

Traceback (most recent call last):

File "coba6.py", line 55, in

a, b, sigmaa, sigmab = regresilinear(datax, datay, datae)

File "coba6.py", line 42, in regresilinear

a = ((sum1*sum2)-(sum3*sum4))/det

ZeroDivisionError: float division by zero

最佳答案

不知何故,det 被设置为等于 0。由于您从未明确阻止这种情况发生,因此单个输入行...

1.0 <whatever> 1.0

...可能导致被零除。 (在这种情况下,y 值无关紧要。)替换后,您将拥有:

sum1 = 0.0 + 1.0**2 / 1.0**2  # sum1 == 1.0
sum3 = 0.0 + 1.0 / 1.0**2 # sum3 == 1.0
sum5 = 0.0 + 1 / 1.0**2 # sum5 == 1.0
det = 1.0 * 1.0 - 1.0**2 # det == 0.0
...
a = <whatever> / det # KABOOM!

实际上,没有输入也会产生这个错误,因为 regresilinear 中的 for 循环永远不会改变各种 sum* 变量的默认 0.0 值。

如果您确定您的输入没有这样做,您可能想在 regresilinear 中添加 print 语句以查看如何 det 被设置为零。 (或者使用 pdb 调试器,如果您熟悉的话。)

PS:如果函数不像n 那样依赖于全局数据,那么调试它们会容易得多。您甚至不需要它,因为它应该始终等于三个列表 dataxdataydatae 的长度。

PPS:readdatafile 完全忽略其filename 参数。因此,如果硬编码的 kalibration.txt 文件恰好存在但为空,您将得到完全相同的 ZeroDivisionError

关于 python : ZeroDivisionError: float division by zero,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27414255/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com