该代码是本地化算法的实现:
colors = [['red', 'green', 'green', 'red' , 'red'],
['red', 'red', 'green', 'red', 'red'],
['red', 'red', 'green', 'green', 'red'],
['red', 'red', 'red', 'red', 'red']]
motions = [[0,0],[0,1],[1,0],[1,0],[0,1]]
p_move = 0.8
def show(p):
for i in range(len(p)):
print p[i]
p = []
sum=0
for i in range(len(colors)):
for j in range(len(colors[i])):
sum+=1
p=[[1.0/sum for j in range(len(colors[i]))] for i in range(len(colors))]
def move(lst,u=[]):
q=[]
if (u[0]!=0) :
for i in range(len(lst)):
new=[]
for j in range(len(lst[i])):
val=lst[j-u][i]*p_move
new.append(val)
q.append(new)
elif (u[1]!=0) :
for i in range(len(lst)):
new=[]
for j in range(len(lst[i])):
val=lst[i][j-u]*p_move
new.append(val)
q.append(new)
return q
a=[[0 for i in range(len(colors[j]))] for j in range(len(colors))]
for i in range(len(motions)):
a=move(p,motions[i])
show(p)
TypeError
上面的代码为以下语句抛出了问题中指定的内容:
val=lst[i][j-u]*p_move
请告诉我为什么会这样。我是 python 的新手,看不出编译器应该抛出这个错误的原因。此外,我正在尝试根据列表中存在的motions
列表中的值更改列和行中的值。我试图实现这一目标的方式是否正确?
编辑
许多人询问此代码的目的。我将重复我在问题的评论部分中提到的内容:它是旨在实现本地化算法的代码的一部分。这部分代码用于计算移动的概率。成功移动到所需单元格的概率是 p_move = 0.8。如果命令设备移动到该单元格,则将给定单元格的先前概率乘以该值。
但是,其中一位评论员要求的示例输出需要包含我的代码的另一部分,这将需要进一步解释并进一步混淆目的。