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