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行中,但我不知道如何重建此代码。有人能帮我吗 我的代码: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行中,但我不知道如何重建
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