개요 : 저는 파이썬에서 초보자이며 파이썬에서 현지화 알고리즘을 구현 중입니다. 이 코드를 실행하는 로봇은 먼저 셀의 색이 measurements
목록의 색과 일치하면 해당 환경을 감지하고 확률 분포에 sensor_right
을 곱합니다. move
함수 성공적인 운동 0.8 확률 원하는 위치로 로봇을 이동 :이 python 코드 스 니펫의 문제점은 무엇입니까?
번호 :
colors = [['red', 'green', 'green', 'red' , 'red'],
['red', 'red', 'green', 'red', 'red'],
['red', 'red', 'green', 'green', 'red'],
['red', 'red', 'red', 'red', 'red']]
measurements = ['green', 'green', 'green' ,'green', 'green']
motions = [[0,0],[0,1],[1,0],[1,0],[0,1]]
sensor_right =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 sense(p,z):
q=[]
sum=0
for i in range(len(colors)):
new=[]
for j in range(len(colors[i])):
if (colors[i][j]==z) :
new.append(p[i][j]*sensor_right)
sum+=p[i][j]*sensor_right
else :
new.append(p[i][j]*(1-sensor_right))
sum+=p[i][j]*(1-sensor_right)
q.append(new)
for i in range(len(q)):
for j in range(len(q)):
q[i][j]/=sum
return q
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[0]][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[1]]*p_move
new.append(val)
q.append(new)
return q
for i in range(len(measurements)):
p=sense(p,measurements[i])
p=move(p,motions[i])
show(p)
문제점 :
: 컴파일러는 다음 OUPUT 반환 in sense new.append(p[i][j]*(1-sensor_right)) IndexError: list index out of range
내가 전화를했을 때 motions
메서드에서 컴파일러가 오류를 throw하지 않고 올바른 출력을 보여줍니다. 이상하게도, 내가 motions
메소드의 출력을 검사했을 때, 루프에 호출 될 때 sense
메소드로 전달 된 2-d리스트와 동일한 치수를 갖는 2d리스트가 리턴되었습니다. 또한 왜 컴파일러가
new.append(p[i][j]*sensor_right)
sum+=p[i][j]*sensor_right
에 오류가 발생하면 색인이 범위를 벗어났습니다.
왜 컴파일러에서이 오류가 발생합니까?
감사합니다. Btw 크기는 5x4입니다. –