打印一致数倍的特定数字的倍数

时间:2018-03-21 20:50:44

标签: python while-loop number-sequence

也许是一个愚蠢的问题,我试图在循环中打印数字,使得它们是10的倍数。只要循环中的时间步长是10的倍数,这就很容易了。这就是我的做法它:

time = 0.
timestep = 2.
while time <= 100.:
    if int(round(time)) % 10 == 0:
        print time
    time += timestep

给出了输出:

0.0
10.0
20.0
30.0
40.0
50.0
60.0
70.0
80.0
90.0
100.0

如果我使用timetep = 1,我会得到类似的输出。我的问题是,现在我的时间步长是另一个变量的函数,并且是一个带有许多小数的浮点数。例如,对于一种情况,时间步长结果为1.31784024239,如果我尝试进行类似的循环,那么我得到的数字就不再那么统一了。例如,我得到:

0.0 
19.7676036358 
30.310325575 
39.5352072717
50.0779292108
69.8455328467
80.3882547858
89.6131364825

我的问题是,是否有任何技巧,以便我的输出均匀打印 - 每个,让我们说,10天?它不一定要十分,但我希望有一个点,例如0到19之间(大约10)和另一个大约60,因为从50.07跳到69.84。

我不知道是否可能,但任何想法都会有所帮助,因为我的许多时间步都是带有许多小数的浮点数。

2 个答案:

答案 0 :(得分:3)

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

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

输出:

0.0
10.5427219391
19.7676036358
30.310325575
39.5352072717
50.0779292108
60.6206511499
69.8455328467
80.3882547858
89.6131364825
100.155858422

答案 1 :(得分:1)

请记住上一次打印一行,并在十年改变后立即打印另一行:

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

结果:

$ python x.py 
0.0
12.0
21.0
30.0
42.0
51.0
60.0
72.0
81.0
90.0
相关问题