为什么这个Python代码给出了错误的答案?

时间:2014-02-28 18:41:14

标签: python python-2.x

我写了一个简单的Python代码来解决某个水力公式(Manning's equation):

import math

def mannings(units,A,P,S,n):
    if units=='SI':
        k=1.0
    elif units=='US':
        k=1.49
    R=A/P
    V=(k/n)*(math.pow(R,(2/3)))*(math.sqrt(S))
    Q=A*V
    return R,V,Q

在上面的代码中,速度V是根据knRS计算得出的。然后使用速度通过乘以区域Q来计算放电A。用户输入单位约定,APSnk是根据单位惯例决定的。

当我使用mannings('US',1.0618,2.7916,0.02,0.015)运行该功能时,我得到(0.38035535176959456, 14.047854719572745, 14.916012141242343)R值与电子表格中计算的R相匹配,但VQ之间的距离很远。实际的V应为7.374638178 Q应为7.830634155

如果有人能告诉我这里出了什么问题,那就太好了。这是一个非常简单的公式,我猜它应该很容易。

1 个答案:

答案 0 :(得分:14)

您的问题是2/3是整数除法,因此评估为0。您希望2.0/3强制进行浮点除法。或者在文件顶部包含from __future__ import division以使用Python 2.x中的Python 3样式除法。

假设您没有使用__future__解决方案,您还需要将R = A / P写为例如R = float(A) / PA因为否则,如果PR都是整数,{{1}}也将是整数。