Python的一个奇怪的计算结果

Python的一个奇怪的计算结果,python,numpy,Python,Numpy,我写了一个crule1.py,如下所示 def exp_rule1 (mu1, h, alpha): return h**2/(4*mu1**2) 然后我在解释器中运行它。我得到 Python 2.7.6 |Anaconda 1.9.1 (64-bit)| (default, Nov 11 2013, 10:49:15) [MSC v.1500 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "lice

我写了一个crule1.py,如下所示

 def exp_rule1 (mu1, h, alpha):
     return h**2/(4*mu1**2)
然后我在解释器中运行它。我得到

Python 2.7.6 |Anaconda 1.9.1 (64-bit)| (default, Nov 11 2013, 10:49:15) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.

Imported NumPy 1.8.0, SciPy 0.13.3, Matplotlib 1.3.1
Type "scientific" for more details.
>>> import crul1 as c1
>>> c1.exp_rule1(1, 1, 0)
0
然后我将代码复制到解释器中。结果是

>>> def  exp_rule1 (mu1, h, alpha):
...      return h**2/(4*mu1**2)
... 
>>> exp_rule1(1, 1, 0)
0.25

这让我很困惑,我无法修复它。非常感谢您指出此代码中的问题

问题是你在混合整数和浮点数。尝试调用exp_rule1(1.0,1.0,0.0),您将得到正确的结果。只需确保函数的所有参数都是浮点数。

在Python2.x中,
/
如果其两个操作数都是整数,则返回一个整数值。作为一种特殊情况,
n/d
如果
n
都为正,则为0

为了

您需要确保分子或分母都是浮点值。一种简单的方法是将
4
设为浮点而不是整数

def exp_rule1 (mu1, h, alpha):
    return h**2/(4.0*mu1**2)
另一种解决方案是为
/
导入新的3.x行为,即无论操作数如何,始终返回浮点。如果执行此操作,请将任何依赖整数除法的除法替换为
/

# This allows 1/2 to return 0.5 instead of 0
from __future__ import division 

两个运行python 2的实例都定义了“解释器”。您是否在与导入cru1 as c1
c1.exp_rule1(1,1,0)
行相同的shell中运行第二个?是的,我运行相同的shell。版本是Python2.7,但这两种情况似乎都以相同的方式混合整数和浮点,不是吗?具体地说,您使用的是整数除法而不是浮点除法。整数的1/2为零,浮点数的1/2为5。谢谢。它非常有用。
# This allows 1/2 to return 0.5 instead of 0
from __future__ import division