统一打印某个数的倍数
Print numbers that are multiples of certain number uniformly
这可能是个愚蠢的问题,我正在尝试在循环中以数字为 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
如果我使用 timestep = 1,我会得到类似的输出。我的问题是,现在我的时间步是作为另一个变量的函数给出的,并且是一个有很多小数的浮点数。例如,对于一种情况,时间步长为 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
结果:
$ python x.py
0.0
12.0
21.0
30.0
42.0
51.0
60.0
72.0
81.0
90.0
这是一个简单的解决方案,可以找到最接近给定倍数系列的步骤:
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
这可能是个愚蠢的问题,我正在尝试在循环中以数字为 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
如果我使用 timestep = 1,我会得到类似的输出。我的问题是,现在我的时间步是作为另一个变量的函数给出的,并且是一个有很多小数的浮点数。例如,对于一种情况,时间步长为 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
结果:
$ python x.py
0.0
12.0
21.0
30.0
42.0
51.0
60.0
72.0
81.0
90.0
这是一个简单的解决方案,可以找到最接近给定倍数系列的步骤:
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