Python 上的操作顺序不正确。有人知道发生了什么事吗?

Order of operations not properly working on Python. Anyone know what's happening?

我正在开发 Python 2.7。我创建了一个简单的程序,它采用球体的半径 (r = 6) 并计算其体积。我使用括号试图将更高的优先级组合在一起。当我使用这个程序时:

> import math as m
> sphere = (4/3)*(m.pi)*(6**3)
> print(sphere)

我得到了一个不正确的值 678.58

当我使用这个程序时:

import math as m
sphere = (4)*(m.pi)*(6**3)/3
print(sphere)

无论括号如何分组,只要我把分母放在等式末尾,我就得到了正确的值904.77792。

问题是

的结果
x = 4/3
print(x) # this will print 1

因为4是整数类型,你把它除以另一个整数。因此 Python(2.7) returns 1 而不是 1.3333333。如果你想得到一个十进制值,你可以这样做

import math as m
sphere = (4.0/3)*(m.pi)*(6**3)
print(sphere)

在第二种情况下,当数字 m.pi 是浮点数时,这就是将浮点数除以整数时得到正确结果的原因。

正如其他人所说,这是整数除法与浮点数除法的问题。

要使除法像 Python 3 中那样工作(即总是浮动除法,除非您专门使用 //),只需使用以下命令启动您的程序:

from __future__ import division

...这会将 / 的行为更改为您所期望的。

但是您使用 Python 2.7 有什么具体原因吗? 它已被弃用并且不再受支持。旨在将 Python 3 用于新项目。

在 Pyhton 2.7 中,两个 int 之间的除法会产生 int 结果。您可以通过使用以下选项之一将分区中的一个参数类型转换为浮点数来解决此问题:

  • 在一个参数中添加一个点:
x = (4./3)  # 1.33333
  • 一个参数的显式类型转换:
x = (float(4)/3)  # 1.33333

对了,你真的需要用Python2.x吗?如果您正在开发新东西,我建议您迁移到 Python 3.x,因为 2020 年 Python 2 has been deprecated