在Python上无法正常工作的操作顺序。有人知道发生了什么吗?

2024-06-16 14:59:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究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)*(m.pi)*(6**3)/3
print(sphere)

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


Tags: import程序as错误pi半径体积math
3条回答

问题是,这是一个错误的结果

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)

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

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

要使除法与Python 3中的除法类似(即始终使用浮点除法,除非您专门使用//),只需从以下内容开始您的程序:

from __future__ import division

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

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

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

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

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

相关问题 更多 >