【问题标题】:Wrong Output on Running Python Code运行 Python 代码时输出错误
【发布时间】:2018-08-18 10:03:26
【问题描述】:

我已经运行了以下代码sn-p:

#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。为什么?

【问题讨论】:

  • 我之前已经成功运行过程序。但是当我下次运行它时,问题就开始出现了。
  • 除以 / 在 python 3 和 python 2 中的工作方式不同。大概你现在使用 2,其中 / 运算符进行整数除法,即向下舍入到最接近的整数。在这种情况下,为零。您可以通过在除法之前将值转换为浮点数来避免这种情况。
  • 谢谢,忘了我有 python 2 和 3。用错了。

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


【解决方案1】:

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

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

from __future__ import division

在您的代码之上。

【讨论】:

    【解决方案2】:

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

    avg_spd = float(path) / time
    

    【讨论】:

      【解决方案3】:

      Python2 中,两个整数相除总是会产生一个四舍五入的整数。 因此,在您的情况下,答案将四舍五入结果为 10000/18000,即 0。

      Python3中你会得到一个浮点数,这是你真正想要的答案。 但是,如果您想在 Python2 中获得相同的答案,那么只需键入 cast your path to float ,您就会在 float 中得到所需的答案:

      avg_speed = (float)path/time
      

      【讨论】:

        【解决方案4】:

        Python 3 将给出一个浮点数作为两个整数相除的答案,而 Python 2 将给出一个 int。

        在您的情况下,当您进行除法时,将其中一个设为浮动。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-01-24
          • 2019-05-11
          • 1970-01-01
          • 1970-01-01
          • 2021-08-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多