我写了一个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
这让我非常困惑,我无法解决它。非常感谢您在此代码中指出问题。
答案 0 :(得分:2)
在Python 2.x中,/
如果两个操作数都是整数,则返回一个整数值。作为一种特殊情况,如果n/d
n < d
为0,则def exp_rule1 (mu1, h, alpha):
return h**2/(4*mu1**2)
为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
替换所有依赖整数除法的除法。
{{1}}
答案 1 :(得分:0)
问题是你在混合整数和浮点数。尝试拨打电话exp_rule1(1.0, 1.0, 0.0)
即可获得正确的结果。只需确保该函数的所有参数都是浮点数。