在Python上无法正常工作的操作顺序。任何人都知道什么';发生什么事了?

在Python上无法正常工作的操作顺序。任何人都知道什么';发生什么事了?,python,python-2.7,Python,Python 2.7,我正在研究Python2.7。我创建了一个简单的程序,它获取球体的半径(r=6)并计算其体积。我用括号试图将更高的先例组合在一起。当我使用这个程序时: > import math as m > sphere = (4/3)*(m.pi)*(6**3) > print(sphere) 我得到了一个错误的值678.58 当我使用这个程序时: > import math as m > sphere = (4/3)*(m.pi)*(6**3) > print(sph

我正在研究Python2.7。我创建了一个简单的程序,它获取球体的半径(r=6)并计算其体积。我用括号试图将更高的先例组合在一起。当我使用这个程序时:

> import math as m
> sphere = (4/3)*(m.pi)*(6**3)
> print(sphere)
我得到了一个错误的值678.58

当我使用这个程序时:

> import math as m
> sphere = (4/3)*(m.pi)*(6**3)
> print(sphere)
将数学导入为m

sphere=(4)*(m.pi)*(6**3)/3

打印(球体)


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

问题在于

x = 4/3
print(x) # this will print 1
因为4是一个整数类型,你把它除以另一个整数。因此,Python(2.7)返回1,而不是1.3333。如果你想得到一个十进制值,你可以这样做

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

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

正如其他人所说,这是整数与浮点数之比的问题

要使除法与Python 3中的除法一样工作(即始终使用浮点除法,除非您专门使用
/
),只需从以下代码开始您的程序:

来自未来进口部的

…这会将
/
的行为更改为您期望的行为


但是您使用Python 2.7有什么具体原因吗?它已被弃用,不再受支持。目标是在新项目中使用Python3。

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

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

顺便问一下,您真的需要使用Python2.x吗?如果您正在开发新的东西,我建议您迁移到Python3.x,因为在2020年。

在Python3中尝试一下。您是对的。我会换的。谢谢您的帮助。@mza如果答案对您有帮助,您可以将其标记为已接受