目标是当sleep_time达到0.1时,它会开始循环并打印数字。
import time
number = 0
sleep_time = 1
# Main code
while sleep_time >= 0.1:
if sleep_time == 0.1:
while True:
print(number)
number += 1
time.sleep(sleep_time)
print(number)
sleep_time -= 0.1
这会打印从1到10的数字,然后停止。
答案 0 :(得分:4)
这是浮点不精确的问题,请考虑:
>>> sleep = 1
>>> dec = 0.1
>>> for _ in range(9):
... sleep -= dec
...
>>> sleep
0.10000000000000014
>>> sleep == 0.1
False
>>>
在处理这类事情时,通常math.isclose
是可行的解决方案:
>>> import math
>>> math.isclose(sleep, 0.1)
True
>>>
以下应为required reading
其他方法是仅使用int
对象或使用decimal.Decimal
。
答案 1 :(得分:1)
这是由于floating point error造成的。
x = 1.0
for _ in range(9):
x -= 0.1
print(x) # 0.10000000000000014
print(x == 0.1) # False
当处理原子量的问题需要精确的算术时,最好使用int
而不是float
。在这种情况下,您的原子量为十分之一秒,我们将1
表示为0.1秒。
import time
number = 0
sleep_time = 10 # in tenth of seconds
# Main code
while sleep_time >= 1:
if sleep_time == 1:
while True:
print(number)
number += 1
time.sleep(sleep_time / 10)
print(number)
sleep_time -= 1