Python 统一打印特定数字的倍数

Python 统一打印特定数字的倍数,python,while-loop,number-sequence,Python,While Loop,Number Sequence,也许这是一个愚蠢的问题,我正试图在一个循环中打印出10的倍数。只要循环中的timestep是10的倍数,这是非常容易的。我就是这样做的: time = 0. timestep = 2. while time <= 100.: if int(round(time)) % 10 == 0: print time time += timestep 如果我使用timestep=1,我会得到类似的输出。我的问题是,现在我的timestep是另一个变量的函数,是一个有

也许这是一个愚蠢的问题,我正试图在一个循环中打印出10的倍数。只要循环中的timestep是10的倍数,这是非常容易的。我就是这样做的:

time = 0.
timestep = 2.
while time <= 100.:
    if int(round(time)) % 10 == 0:
        print time
    time += timestep
如果我使用timestep=1,我会得到类似的输出。我的问题是,现在我的timestep是另一个变量的函数,是一个有许多小数的浮点。例如,在一个例子中,时间步长是1.31784024239,如果我尝试做一个类似的循环,我得到的数字就不再那么一致了。例如,我得到:

0.0 
19.7676036358 
30.310325575 
39.5352072717
50.0779292108
69.8455328467
80.3882547858
89.6131364825
我的问题是,是否有任何技巧可以让我的输出统一打印—比如说,每10天打印一次?它不必精确到10,但我希望有一个点,例如,在0和19之间(大约10),另一个在60左右,因为从50.07跳到69.84


我不知道这是否可能,但任何想法都会非常有用,因为我的许多时间步都是带有许多小数的浮点

记住上次打印一行的时间,并在十年发生变化时立即打印另一行:

time = 0.
lasttime = -1.
timestep = 3.
while time <= 100.:
    if time // 10 != lasttime // 10:
        print time
        lasttime = time
    time += timestep

请记住上次打印一行的时间,并在十年发生变化时立即打印另一行:

time = 0.
lasttime = -1.
timestep = 3.
while time <= 100.:
    if time // 10 != lasttime // 10:
        print time
        lasttime = time
    time += timestep

下面是一个简单的解决方案,可以找到最接近给定倍数序列的步骤:

def stepper(timestep, limit=100.0, multiple=10.0):
    current = multiples = 0.0
    while current <= limit:
        step = current + timestep
        if step >= multiples:
            if multiples - current > step - multiples:
                yield step
            else:
                yield current
            multiples += multiple
        current = step

for step in stepper(1.31784024239):
    print step

下面是一个简单的解决方案,可以找到最接近给定倍数序列的步骤:

def stepper(timestep, limit=100.0, multiple=10.0):
    current = multiples = 0.0
    while current <= limit:
        step = current + timestep
        if step >= multiples:
            if multiples - current > step - multiples:
                yield step
            else:
                yield current
            multiples += multiple
        current = step

for step in stepper(1.31784024239):
    print step

嗯。它总是给出一个超出阈值的点,不一定是最近的点。嗯。它总是给出一个超出阈值的点,不一定是最近的点。如果
timestep
大于3,那么它会从9跳到12,而不会接近10?我没有大于2的timestep,但在这种情况下,我不介意是否改为每9天写入一次数字。只要这些数字是“整数”,我想我就可以把它们变成其他不同于10的数字的倍数。我现在的问题是我所有的时间步都有很多小数。这个问题不需要很多小数,它发生在
1.32
上,因为
time
9.24
跳到
10.56
。哪一个应该被打印?任何一个都可以。如果
timestep
大于3,那么它会从9跳到12,而不会接近10?我没有大于2的timestep,但是在这种情况下,我不介意每9天写一次数字。只要这些数字是“整数”,我想我就可以把它们变成其他不同于10的数字的倍数。我现在的问题是我所有的时间步都有很多小数。这个问题不需要很多小数,它发生在
1.32
上,因为
time
9.24
跳到
10.56
。应该打印哪一个?两个都可以。
0.0
10.5427219391
19.7676036358
30.310325575
39.5352072717
50.0779292108
60.6206511499
69.8455328467
80.3882547858
89.6131364825
100.155858422