2014-03-07 31 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)