【问题标题】:Why does this Python code give me the wrong answer?为什么这个 Python 代码给了我错误的答案?
【发布时间】:2014-02-28 18:41:14
【问题描述】:

我写了一个简单的 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 计算得出的。然后使用速度乘以面积A 来计算流量Q。用户输入单位约定,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

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

【问题讨论】:

  • 旁注:也许k / n * R ** (2.0 / 3) * S ** .5 比拼出math.powmath.swrt 更清晰。

标签: python python-2.x


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    相关资源
    最近更新 更多