Python 按不同步骤递增和递减循环

Python 按不同步骤递增和递减循环,python,Python,我想做一些简单的循环,用不同的方法增加和减少不同的值 一段时间到期前的步长 例如: (1) 步骤1的第一个变量范围为10到20 (2) 第二个变量的范围为20到30,步骤2 (3) 第三个变量的范围为30到40,步骤3 (4) 步骤5中的第四个变量范围为10到50 (1) 1011。。。20 19 ... 10 (2) 2022。。。30 28 ... 20 (3) 30 33。。。39 36 ... 30 (4) 1015。。。50 45 ... 10 问题出在elif行中,但我不知道如何重建

我想做一些简单的循环,用不同的方法增加和减少不同的值 一段时间到期前的步长

例如:

(1) 步骤1的第一个变量范围为10到20

(2) 第二个变量的范围为20到30,步骤2

(3) 第三个变量的范围为30到40,步骤3

(4) 步骤5中的第四个变量范围为10到50

(1) 1011。。。20 19 ... 10

(2) 2022。。。30 28 ... 20

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

(4) 1015。。。50 45 ... 10

问题出在elif行中,但我不知道如何重建此代码。有人能帮我吗

我的代码:

for i in range(4):
    aHO.setBlock((i + 1), startValue[i])

while time.time() < end:
    for i in range (4):
        if actualValue[i] <= stopValue[i] - stepSize[i]:
            actualValue[i] = actualValue[i] + stepSize[i]
            aHO.setBlock((i + 1), actualValue[i])
        elif actualValue[i] > stopValue[i] - stepSize[i]:
            actualValue[i] = actualValue[i] - stepSize[i]
            aHO.setBlock((i + 1), actualValue[i])

time.sleep(float(timeInterval) / 1000)
范围(4)内的i的
:
aHO.setBlock((i+1),起始值[i])
while time.time()
一切正常,直到值接近停止值,然后值减小,但只有一次,然后增加,也只有一次,依此类推。例如

1 2 3。。。910910910


尝试使用以下语法中的范围-

range(start, end, step_size)

如果小于
StopValue
(-一步大小),则将其设置为递增;如果大于
StopValue
(+一步大小),则将其设置为递减。这往往会使它保持在正确的停止值,因为你有强烈的负面反馈从徘徊


您需要将算法更改为“滑动”-这只是算法的草图,但您希望基本上设置正负限制,并添加当前方向。只要您在所需的范围内,即
-n*步长,您就可以使用它生成所需的值:

>>> 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]
>>> 

根据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)
来自itertools导入链的

def get_下一步(开始、停止、步骤)
尽管如此:
对于列表中的j(链(xrange(开始、停止、步骤),xrange(停止、开始-1,-步骤)):
产量j
while time.time()
您的确切问题是什么,您当前的代码生成了什么?顺便问一下,是否缺少startValue