Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建“蛇”计数器_Python_Python 3.x_For Loop - Fatal编程技术网

Python 创建“蛇”计数器

Python 创建“蛇”计数器,python,python-3.x,for-loop,Python,Python 3.x,For Loop,我只是想把逻辑弄清楚,然后用Python来帮助我。最终,我需要使用ImageJ宏语言解决这个问题 我不知道我是否使用了正确的术语,但我想创建一个snake计数器 x = 1 number = 12 maxVal = 3 minVal = 1 for i in xrange(number): %do something x = incrementSnakeCounter(x, maxVal, minVal) print("i = ", i) print("x =

我只是想把逻辑弄清楚,然后用Python来帮助我。最终,我需要使用ImageJ宏语言解决这个问题

我不知道我是否使用了正确的术语,但我想创建一个snake计数器

x = 1
number = 12
maxVal = 3
minVal = 1

for i in xrange(number):
    %do something
    x = incrementSnakeCounter(x, maxVal, minVal)
    print("i = ", i)
    print("x = ", x)
snake部分使计数器仅上升到maxVal,在下一次迭代中重复该数字,向下计数到minVal,在下一次迭代中重复该值,并重复该过程

例如,在上面

我希望发生以下情况:

i = 0
x = 1

i = 1
x = 2

i = 2
x = 3

i = 3
x = 3

i = 4
x = 2

i = 5
x = 1

i = 6
x = 1

i = 7
x = 2

i = 8
x = 3

i = 9
x = 3

i = 10
x = 2

i = 11
x = 1

添加一个条件,以确定x在循环中的任何给定点是增加还是减少

x = 1
number = 12
maxVal = 3
minVal = 1

for i in xrange(number):
    %do something
    if(xIsIncreasing)
        x = incrementSnakeCounter(x, maxVal, minVal)
    else
        x = decrementSnakeCounter(x, maxVal, minVal)
    print("i = ", i)
    print("x = ", x)

然后在incrementSnakeCounter中,当x==maxVal时,将xisIncreming的值更改为false;当x==minVal时,将decrementSnakeCounter中的值更改为true。您必须做一些工作,以确保连续两次保持相同的值,我现在没有时间为您解决这部分问题。

添加一个条件,以确定x在循环中的任何给定点是否应该增加或减少

x = 1
number = 12
maxVal = 3
minVal = 1

for i in xrange(number):
    %do something
    if(xIsIncreasing)
        x = incrementSnakeCounter(x, maxVal, minVal)
    else
        x = decrementSnakeCounter(x, maxVal, minVal)
    print("i = ", i)
    print("x = ", x)

然后在incrementSnakeCounter中,当x==maxVal时,将xisIncreming的值更改为false;当x==minVal时,将decrementSnakeCounter中的值更改为true。您必须做一些工作,以确保连续两次保持相同的值,我现在没有时间为您解决这部分问题。

您将在以下内容中找到一些有用的实用工具:


您将在以下内容中找到一些有用的UTIL:


您可以编写一个小型自定义生成器

关键是创建要重复的模式列表[1,2,3,3,2,1],然后使用长度的模对其进行索引,以获得重复行为:

def snake(x, max_v=3, min_v=1):
    cnt=0
    sn=list(range(min_v, max_v+1,1))+list(range(max_v, min_v-1,-1))
    while cnt<x:
        yield cnt, sn[cnt%len(sn)]
        cnt+=1
印刷品:

i= 0
x= 1

i= 1
x= 2

i= 2
x= 3

i= 3
x= 3

i= 4
x= 2

i= 5
x= 1

i= 6
x= 1

i= 7
x= 2

i= 8
x= 3

i= 9
x= 3

i= 10
x= 2

i= 11
x= 1

您可以编写一个小型自定义生成器

关键是创建要重复的模式列表[1,2,3,3,2,1],然后使用长度的模对其进行索引,以获得重复行为:

def snake(x, max_v=3, min_v=1):
    cnt=0
    sn=list(range(min_v, max_v+1,1))+list(range(max_v, min_v-1,-1))
    while cnt<x:
        yield cnt, sn[cnt%len(sn)]
        cnt+=1
印刷品:

i= 0
x= 1

i= 1
x= 2

i= 2
x= 3

i= 3
x= 3

i= 4
x= 2

i= 5
x= 1

i= 6
x= 1

i= 7
x= 2

i= 8
x= 3

i= 9
x= 3

i= 10
x= 2

i= 11
x= 1

下面是一个愚蠢的数学解决方案:

def snake(low, high, x):
    k = (high-low+1)
    return k - int(abs(x % (2*k) + low - k - 0.5))

[snake.snake(1,3,x) for x in range(8)]
[1, 2, 3, 3, 2, 1, 1, 2]

下面是一个愚蠢的数学解决方案:

def snake(low, high, x):
    k = (high-low+1)
    return k - int(abs(x % (2*k) + low - k - 0.5))

[snake.snake(1,3,x) for x in range(8)]
[1, 2, 3, 3, 2, 1, 1, 2]

这是一个很好的解决方案。不幸的是,我需要用ImageJ宏语言实现它。我应该清楚地说明python仅用于说明。如果最小值或最大值发生变化,这将不起作用。@agf1997 imagej宏在stackoverflow上有自己的标记。非常抱歉。我想逻辑本身不应该太难用任何语言或伪代码来确定。@GlenPierce问题中从未提到过它们会发生变化。@agf1997 dawg的答案有一种基于模的方法,可以很好地翻译到大多数语言。这是一个很好的解决方案。不幸的是,我需要用ImageJ宏语言实现它。我应该清楚地说明python仅用于说明。如果最小值或最大值发生变化,这将不起作用。@agf1997 imagej宏在stackoverflow上有自己的标记。非常抱歉。我想逻辑本身不应该太难用任何语言或伪代码来确定。@GlenPierce在问题中从未提到过它们会发生变化。@agf1997 dawg的答案有一个基于模的方法,可以很好地翻译到大多数语言。很好的解决方案!这在我的应用程序中非常有效。只需要将int替换为floor,因为int在ImageJ宏语言中不可用。很好的解决方案!这在我的应用程序中非常有效。只需将int替换为floor,因为int在ImageJ宏语言中不可用。