python中的简单数学不起作用?

Simple math in python won't work?

本问题已经有最佳答案,请猛点这里访问。

我刚开始学习Python,我写了这三行代码:

1
2
3
points = 49
total = points / 50 * 500 + 40
print"omg wtf", total

我预计产量会达到530,但是不管我做什么,我都会得到40。我尝试将total初始化为0,将赋值转换为int,然后插入一堆括号,但没有任何效果。我很困惑…有人能帮我/告诉我到底发生了什么事吗?


"我刚开始学Python……"太棒了。我在1.5年前就这么做了。这是一种有趣的语言和一个良好的社区。

我的强烈建议是你只需换到python3。我自己更快乐。

在这种情况下,你可能会看到530,正如你所预期的那样。在这种情况下,您将更改最后一行以包含括号,例如:

1
print("omg wtf", total)


在python 2中,对两个整数使用除法运算符/通过截断结果返回一个整数。因此,49/50的计算结果为零。

我的建议是在您编写的每段代码的顶部始终使用from __future__ import division,这消除了这种令人困惑的行为。

您还可以通过使用浮动来修复它,例如使用pointsbe 49.0,或者通过执行total = float(points) / 50 * 500 + 40。但是,这些要求您记住对每个计算都要这样做。因为行为在python 3中已经改变了,所以前瞻性的方法是使用from __future__ import division使float division成为默认值。


当输入为整数时,python 2.7和更早版本使用整数数学。因此,49 / 50 = 0。使一个浮点数获得所需的输出:

1
points = 49.  # <-- adding a dot

1
points = float(49)  # wrapping in float()

现在你得到:

1
2
3
>>> total = points / 50 * 500 + 40
>>> print"omg wtf", total
530.0