我刚开始学习python,我写了这三行代码:
points = 49
total = points / 50 * 500 + 40
print "omg wtf ", total
我希望输出类似530,但相反,无论我做什么,我都会得到40.我尝试将total初始化为0,将赋值转换为int,我抛出了一些括号,但没有任何作用。我很困惑......有人可以帮我/告诉我发生了什么事吗?
答案 0 :(得分:6)
“我刚开始学习Python ......”太棒了。我是在1.5年前自己这样做的。这是一种有趣的语言和良好的社区。 p>
我的强烈建议您只需切换到python3
即可。我自己也快乐。
在这种情况下,您会看到530
,就像您预期的那样。在这种情况下,您可以更改最后一行以包括括号,例如:
print("omg wtf", total)
答案 1 :(得分:5)
在Python 2中,在两个整数上使用除法运算符/
会通过截断结果来返回整数。所以49/50
评估为零。
我的建议是始终在您编写的每段代码的顶部使用from __future__ import division
,这会消除这种令人困惑的行为。
您也可以使用浮点数来修复它,例如使用points
成为49.0
或执行total = float(points) / 50 * 500 + 40
。但是,这些要求您记住每次计算都要这样做。因为Python 3中的行为已经改变,所以前瞻性的方法是使用from __future__ import division
使浮点除法成为默认值。
答案 2 :(得分:2)
当输入为整数时,Python 2.7及更早版本使用整数数学。所以49 / 50 = 0
。使一个浮点数得到你想要的输出:
points = 49. # <-- adding a dot
或
points = float(49) # wrapping in float()
现在你得到:
>>> total = points / 50 * 500 + 40
>>> print "omg wtf ", total
530.0