【问题标题】:Simple math in python won't work? [duplicate]python中的简单数学不起作用? [复制]
【发布时间】:2014-03-21 22:52:32
【问题描述】:

刚开始学python,就写了这三行代码:

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

并且我希望输出类似于 530,但相反,无论我做什么,我都会得到 40。我尝试将 total 初始化为 0,将赋值转换为 int,我投入了大量的括号,但没有任何效果。我很困惑...有人可以帮我/告诉我到底发生了什么吗?

【问题讨论】:

  • 49 / 50 为 0,整数的下除法。

标签: python math


【解决方案1】:

“我刚开始学习 Python……”太棒了。 1.5年前我自己也是这样做的。这是一种有趣的语言,也是一个很好的社区。​​p>

我的strong建议是您只需切换到python3。我自己更快乐。

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

print("omg wtf", total)

【讨论】:

  • 我在 8 个月前升级到 Python3,但仍然必须从我的 print value 语句中调试 SyntaxErrors。
  • @TravisGriggs,虽然是一个很好的建议,但我要指出,在许多环境中根本不可能升级到 3
  • 为了学习@mhlester?
  • 当然是为了在真空中学习使用 3。但是如果例如 OP 正在学习一个使用嵌入式 python 进行脚本编写的不同程序,那么无论它使用什么,你都会被困住
【解决方案2】:

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

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

您也可以使用浮点数来修复它,例如使用points 成为49.0,或使用total = float(points) / 50 * 500 + 40。但是,这些要求您记住每次计算都要这样做。因为在 Python 3 中改变了行为,前瞻性的方式是使用from __future__ import division 将浮点除法设为默认值。

【讨论】:

  • 谢谢。你能给我推荐一些好的python教程吗?我看过的不是很具有描述性...
【解决方案3】:

当输入为整数时,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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-31
    • 2011-04-14
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多