2014-03-07 30 views
0

我想要做一些简单的循环,它将增加和减少不同的值,步长不同,直到有一段时间过期。使用不同的步骤增加和减少循环

例如:

(1)范围中的第一变量从10至20与步骤1

(2)在范围第二可变从20至30与步骤2

(3)在范围第三可变从30至40与步骤3

在范围

(4)第四变量从10至50与步骤5

(1)10 11 ... 20 19 ... 10 ...

(2)20 22 ... 30 28 ... 20 ...

(3)30 33 .. 39 36 ... 30 ...

(4)10 15 ... 50 45 ... 10 ...

的问题是在elif的线,但我不知道如何重建此代码。谁能帮我?

我的代码:

一切都在朝好的方向发展,直到值接近的stopvalue然后这些值下降,但只有一次,然后增加也只有一次,依此类推。例如。

1 2 3 ... 9 10 9 10 9 10 ...

+0

你是什么确切的问题,那么你的当前的代码生成?顺便说一句,有没有一个startValue – schacki

+0

更新@schacki – user3391890

+0

你的输入是什么? –

回答

1

尝试在下面的语法使用范围 -

range(start, end, step_size) 
0

你必须将其设置为递增,如果是小于StopValue( - 一步大小),如果大于StopValue(+一步大小)则递减。这往往会使它保持在StopValue,因为你有很强的负面反馈。

您需要将算法更改为'skid' - 这只是算法的草图,但您希望基本上设置正向的&负向限制,并添加当前方向。只要你在你想要的范围内,即-n*step_size <= offset <= n*step_size,其中n是你从中心允许的步数,你不要修改你的方向。除非你走出这个范围,否则你不会改变你的方向。

0

你可以用它来生成需要的值:

>>> from itertools import chain 
>>> list(chain(xrange(10, 20, 1), xrange(20, 9, -1))) 
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10] 
>>> list(chain(xrange(20, 30, 2), xrange(30, 19, -2))) 
[20, 22, 24, 26, 28, 30, 28, 26, 24, 22, 20] 
>>> list(chain(xrange(30, 40, 3), xrange(39, 29, -3))) 
[30, 33, 36, 39, 39, 36, 33, 30] 
>>> list(chain(xrange(10, 50, 5), xrange(50, 9, -5))) 
[10, 15, 20, 25, 30, 35, 40, 45, 50, 45, 40, 35, 30, 25, 20, 15, 10] 
>>> 
0

基于warwaruk的做法本应做的工作:

from itertools import chain 
def get_next(start, stop, step) 
    while True: 
     for j in list(chain(xrange(start, stop, step), xrange(stop, start-1, -step))): 
      yield j 

while time.time() < end: 
    for actualValues in zip(
     get_next(10,20,1), 
     get_next(20,30,2), 
     get_next(30,40,3), 
     get_next(10,50,5) 
    ): 
    for i,actualValue in enumerate(values): 
     aHO.setBlock((i + 1), actualValue)