我已经运行了以下代码片段:
#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。为什么?
答案 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
干杯!