在下面的代码中:高度简化。我得ZeroDivisionError: float division
低于1的任何值都会产生错误。其他时间5/365给出错误。
我该如何解决?
import math
def top( t):
return ((.3 / 2) * t) / (.3 * math.sqrt(t))
t = 365/365
top= top(t)
print (top)
答案 0 :(得分:7)
问题在于:
t = 365/365
你正在划分两个整数,所以python使用整数除法。在整数除法中,商被向下舍入。例如,364/365
将等于0
。 (365/365
有效,因为它等于1
,仍然1
向下舍入。)
相反,使用float division,就像这样。
t = 365.0/365.0
答案 1 :(得分:7)
除了cheeken的答案,您还可以将以下内容放在模块的顶部:
from __future__ import division
这样做会使除法运算符按照你想要的方式工作,即总是执行(近似)真正的数学除法。除法运算符的默认行为(如果参数恰好绑定到整数,它执行截断整数除法)是从C继承的,但它最终意识到它不适合像Python这样的动态类型语言。在Python 3中,这不再发生。
在我的Python 2模块中,我几乎总是从__future__
导入除法,因此我不会因意外地将整数传递给我不希望截断的除法运算而陷入困境。
值得注意的是from __future__ import ...
语句必须是模块中的非常第一件事(我认为你可以在它之前有注释和文档字符串,没有别的)。它不是一个普通的导入语句,即使它看起来像一个;它实际上改变了Python解释器读取代码的方式,因此它不能等到运行时像普通的import语句一样被执行。另请注意import __future__
不具有from __future__ import ...
的任何魔法效果。
答案 2 :(得分:1)
试试这个:
MyClass
当您尝试除以零时遇到 exponent = math.exp(-(math.pow(x-mean,2)/(2*math.pow(stdev,2))))
。