运行Python代码时输出错误

时间:2018-08-18 10:03:27

标签: python python-3.x python-2.7

我已经运行了以下代码片段:

#Physics Equations

#Default_Variables
default_path = 10000
default_time = 18000
default_ini_vel = 1
default_acceleration = 1

#Variables
path = default_path
time = default_time
ini_vel = default_ini_vel
acceleration = default_acceleration

#Compute
avg_spd = path / time
velocity = (ini_vel + (acceleration * time))

#Prints
print("Average Speed = " + str(avg_spd))
print("Velocity = " + str(velocity))

我期望代码返回浮点型值,以表示包含许多小数位的平均速度。 平均速度的输出等于0。为什么?

4 个答案:

答案 0 :(得分:1)

用/进行除法在python 3和python 2中的工作方式不同。大概您现在使用2,其中/运算符进行整数除法,即四舍五入到最接近的整数。在这种情况下,为零。您可以通过在分割值之前将其转换为浮点数来避免这种情况:

avg_spd = float(path) / time

答案 1 :(得分:1)

正如其他人已经观察到的那样,最可能的罪魁祸首是avg_spd = path / time。在Py2中,这是整数除法,结果四舍五入到最接近的整数。在Py3中,此行为已更改,并返回了可能更直观的浮点结果。

您也可以通过导入在Py2中获得这种“新”行为,

from __future__ import division

在您的代码上方。

答案 2 :(得分:-1)

您是否正在使用Python 2? Python 3将给出浮点数作为整数除法的答案,而Python 2将给出整数。

在您的情况下,进行除法时,将其中之一浮起来。

答案 3 :(得分:-1)

在Python2中,将两个整数相除总是会产生一个四舍五入的整数。 因此,在您的情况下,答案将舍入为10000/18000的结果,该结果将为0。 在Python3中,您将获得一个float,这是您真正想要的答案。 但是,如果您希望在Python2中获得相同的答案,则只需将类型转换为float即可,然后您将在float中获得所需的答案。

avg_speed = (float)path/time

干杯!