我一直在试验 Python 的数学能力,并且发现了一些有趣的行为。它与以下表达式有关:
(4+4)+3/4/5*35-(3*(5+7))-6+434+5+5+5
>>> 415
但是,如果您在考虑标准运算顺序的情况下评估表达式,则答案应该是 420.25。我还仔细检查了 WolframAlpha,给出的答案是 420.25。为什么 Python 给出不同的答案?它与评估此类表达式的方式有关吗?是否有一些遵循它的约定?任何信息将不胜感激,谢谢!
我一直在试验 Python 的数学能力,并且发现了一些有趣的行为。它与以下表达式有关:
(4+4)+3/4/5*35-(3*(5+7))-6+434+5+5+5
>>> 415
但是,如果您在考虑标准运算顺序的情况下评估表达式,则答案应该是 420.25。我还仔细检查了 WolframAlpha,给出的答案是 420.25。为什么 Python 给出不同的答案?它与评估此类表达式的方式有关吗?是否有一些遵循它的约定?任何信息将不胜感激,谢谢!
您想使用浮点除法。将其更改为此有效:
(4+4)+3.0/4/5*35-(3*(5+7))-6+434+5+5+5
整数除法与浮点除法的一些示例:
Python 2.7.2+ (default, Oct 4 2011, 20:06:09)
>>> 3/4
0
>>> 3.0/4
0.75
>>> 3.0/4.0
0.75
浮点数除以整数是浮点运算。Python 3 改变了这一点,因此浮点除法是默认值:
Python 3.2.2 (default, Sep 5 2011, 21:17:14)
>>> 3/4
0.75
因为,在 Python 2 中,/
当运算符和操作数都是整数时,使用整数除法。
您可以将一个更改为浮点数(正如其他回答者所建议的那样),或使用from __future__ import division
: http: //www.python.org/dev/peps/pep-0238/
在 Python 2.x 中 / 运算符是整数除法。如果你写
(4+4)+3.0/4.0/5.0*35-(3*(5+7))-6+434+5+5+5
它会给出预期的答案。
这取决于您正在运行的 Python 版本:
$ python3
Python 3.1.4 (default, Nov 12 2011, 12:16:31)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> (4+4)+3/4/5*35-(3*(5+7))-6+434+5+5+5
420.25
在 Python 3 之前,/
运算符执行整数除法而不是浮点数。
是整数除法。在您的示例中,3/4
计算结果为 0。但是,3.0/4.0
计算结果为 0.75。
>>> (4+4)+3/4/5*35-(3*(5+7))-6+434+5+5+5
415
>>> (4+4)+3./4/5*35-(3*(5+7))-6+434+5+5+5
420.25
此行为在 Python 版本 3 及更高版本中已更改。如果您希望它默认为浮点除法,您可以导入规则。
>>> from __future__ import division
>>> (4+4)+3/4/5*35-(3*(5+7))-6+434+5+5+5
420.25
重要的是要注意 python 或 WolframAlpha 都不会给你数学上正确的答案,因为在数学中我们在除法之前进行乘法运算,而在 python * 和 / 中具有相同的优先级,因此将从左到右进行评估。
3.0/4/5*35 # equal 5.25 in python
3.0/4/5*35 # equal 3.0/4/(5*35) or 0.004285714285714286 in math