你知道为什么我的循环 + 模数 (%) 会跳过 python 中的数字吗

Do you know why my loop + modulo (%) skips numbers in python

我正在尝试每 20 步更新一次,但它会跳过一些我不明白为什么的数字

time=np.linspace(0.1,100,1000)    

for t in time:
    if t % 2 ==0.0:
        print(t, 'ms')

谢谢

这是因为 linespace 没有达到像 18.020.0 这样的精确值。由于浮点计算,有一个小的 epsilon。您可以像下面这样更改您的代码,然后您将命中所有数字:

time=np.linspace(0.1,100,1000)    
epsilon = 0.0001
for t in time:
    if t % 2 < epsilon:
        print(t, 'ms')

另一种方法是每 20 步打印一次(第一次打印是在 19 之后):

time=np.linspace(0.1,100,1000)    
epsilon = 0.0001
for i,t in enumerate(time):
    if (i -19) % 20 ==0:
        print(t, 'ms')

输出:

2.0 ms
4.0 ms
6.0 ms
8.0 ms
10.0 ms
12.0 ms
14.0 ms
16.0 ms
....