如何在Python中找到移动对象的位置序列?

如何在Python中找到移动对象的位置序列?,python,algorithm,Python,Algorithm,我有一个对象(直线上的一个点),它最初位于位置x_min=0。每次dut,对象都会根据这组值dut={1,2,3,4,5,6}移动dut单位。因此,在第一次之后,对象将位于位置x1=0+d_1=1。第二次之后,对象将位于位置x2=x1+d_2=3。第三次之后,对象将位于位置x3=x2+3=6。第四次之后,对象将位于位置x4=x3+4=10。第五次之后,对象将位于位置x5=x4+5=15,第六次之后,对象将位于位置x6=x5+6=21 但是,存在x_max=11的限制。因此,对象不能处于任何位置x

我有一个对象(直线上的一个点),它最初位于位置
x_min=0
。每次
dut
,对象都会根据这组值
dut={1,2,3,4,5,6}
移动
dut
单位。因此,在第一次之后,对象将位于位置
x1=0+d_1=1
。第二次之后,对象将位于位置
x2=x1+d_2=3
。第三次之后,对象将位于位置
x3=x2+3=6
。第四次之后,对象将位于位置
x4=x3+4=10
。第五次之后,对象将位于位置
x5=x4+5=15
,第六次之后,对象将位于位置
x6=x5+6=21

但是,存在
x_max=11
的限制。因此,对象不能处于任何位置
x>x\u max
x
。因此,必须校正位置
x5
x6

在到达
x5
之前,该对象处于
x4=10
位置,下次将移动
5
个单位。由于
x_max=11
,对象可以进一步移动
1
单位,然后必须向后移动
4
单位。因此,它将位于位置
x5=10+1-4=7
。现在,对象将向后移动6个单位。因此,
x6=7-6=1>x_min

最后,我们得到了位置
0、1、3、6、10、7、1
的序列

我想编写一个Python代码来查找这个序列,给定
x\u max
x\u min
,以及集合
d\u t

我试图这样做,我开始与此代码,但未能继续

x_min = 0
x_max = 11
x = x_min
for d_t in range(1, 7):
    if d_t + x <= x_max:
        x = x + d_t
    else:
        x = 2 * x_max - x - d_t
x_min=0
x_max=11
x=x_最小值
对于范围(1,7)内的d_t:

如果d_t+x,无论立方体在移动什么。只是用不同的方式思考,让它更容易得到

d_t = {1, 2, 3, 4, 5, 6}
XX=[]
x_min = 0
x_max = 11
x = x_min
for d_t in range(1, 7):
        x += d_t
        XX.append(x)



LL=list(range(1,12))+sorted(list(range(1,11)), key=int, reverse=True)
[LL[i-1] for i in XX]


Out[17]: [1, 3, 6, 10, 7, 1]

无论立方体是什么样的运动。只是用不同的方式思考,让它更容易得到

d_t = {1, 2, 3, 4, 5, 6}
XX=[]
x_min = 0
x_max = 11
x = x_min
for d_t in range(1, 7):
        x += d_t
        XX.append(x)



LL=list(range(1,12))+sorted(list(range(1,11)), key=int, reverse=True)
[LL[i-1] for i in XX]


Out[17]: [1, 3, 6, 10, 7, 1]

你需要有一些方法来跟踪你要去的方向。在下面的代码中,我使用了
符号
。当符号为+1时,我们前进;当符号为-1时,我们后退。当我们浏览
xmax
或低于
xmin
时,我们需要反转
符号

xmin, xmax = 0, 11
d_t = [1, 2, 3, 4, 5, 6, 7, 8]

x = xmin
sign = 1
for d in d_t:
    x += sign * d
    if x > xmax:
        x = 2 * xmax - x
        sign = -sign
    if x < xmin:
        x = 2 * xmin - x
        sign = -sign
    print(d, x)

你需要有一些方法来跟踪你要去的方向。在下面的代码中,我使用了
符号
。当符号为+1时,我们前进;当符号为-1时,我们后退。当我们浏览
xmax
或低于
xmin
时,我们需要反转
符号

xmin, xmax = 0, 11
d_t = [1, 2, 3, 4, 5, 6, 7, 8]

x = xmin
sign = 1
for d in d_t:
    x += sign * d
    if x > xmax:
        x = 2 * xmax - x
        sign = -sign
    if x < xmin:
        x = 2 * xmin - x
        sign = -sign
    print(d, x)

那么,你的问题到底是什么?问题是什么?似乎足够简单?此外,您使用术语“set”,即“set
d_t
”,但您使用的是
范围
对象,这与
集合
非常不同。至少,请记住,Python上下文中的单词
set
通常指的是特定的数据结构,恰好是由
dut={1,2,3,4,5,6}
创建的数据结构,但这不是您想要使用的。问题是我的代码没有生成正确的序列。它返回
1,3,6,10,7,9
。具体地说,每当我发现我超过了
x_max
时,我会后退,但只后退一次。我必须向后走,直到到达
x_min
,然后再向前走,等等。那么,你的问题到底是什么?问题是什么?似乎足够简单?此外,您使用术语“set”,即“set
d_t
”,但您使用的是
范围
对象,这与
集合
非常不同。至少,请记住,Python上下文中的单词
set
通常指的是特定的数据结构,恰好是由
dut={1,2,3,4,5,6}
创建的数据结构,但这不是您想要使用的。问题是我的代码没有生成正确的序列。它返回
1,3,6,10,7,9
。具体地说,每当我发现我超过了
x_max
时,我会后退,但只后退一次。我必须向后走,直到到达
x_min
,然后再向前走,等等。
1 1
2 3
3 6
4 10
5 7
6 1
7 6
8 8