我正在运行这个非常简单的测试功能:
import time
def printnum(ang):
if ang > 0:
print(ang)
time.sleep(3 * abs(ang) / 360)
print("done")
if ang < 0:
print(ang)
time.sleep(3 * abs(ang) / 360)
print("done")
当我在python 3上运行它时工作正常
但是,在python 2上,我遇到一个问题,其中printnum
不适用于多种数字,它不会执行延迟...事实上,到目前为止它只适用于{{1}在我的测试中。
这对于如此简单的代码来说很奇怪。我在2台电脑上测试过。它会发生在你身上吗?有什么理由吗?建议让它工作? (除了转移到我正在使用的硬件上很难的python 3)
答案 0 :(得分:1)
在Python 2上,/
默认在传递int
个操作数时截断整数除法,而不是&#34;真正的除法&#34; (产生float
个结果)。您可以通过以下两种方式之一进行修复:
from __future__ import division
添加到文件顶部以使用Python 3分区规则(/
表示始终为真正的分区,如果您真的是指分区,则使用//
)3
或360
更改为float
文字,以便执行数学float
- 样式,例如time.sleep(3. * abs(ang) / 360)
或time.sleep(3 * abs(ang) / 360.)
答案 1 :(得分:1)
因为ang
可能是一个足够小的整数,所以3 * abs(ang) / 360
是一个表达式,其中一个整数除以另一个整数。
Python 2除法默认为整数除法,因此结果可能为0。
修正:
3.0 * abs(ang) / 360