2010-07-14 3 views
2

실행하면 포장을 풀기에 너무 많은 값이 나옵니다. 어떻게 제대로 작동하게합니까?값 오류 : 포장을 푸는 값이 너무 많습니다.

stack = util.Stack() 
    closed = [] 
    child = [] 
    index = 0 
    currNode = problem.getStartState() 
    node = currNode 
    stack.push(node) 
    while not stack.isEmpty(): 
    node = stack.pop() 
    if problem.isGoalState(node): 
     print "true" 
     closed.append(node) 
    else: 
     child = problem.getSuccessors(node) 
     for nodes in child: 
      stack.push(nodes) 
     closed.append(node) 
    return None  

오류는 다음과 같습니다

File line 90, in depthFirstSearch 
    child = problem.getSuccessors(node) 
    File line 179, in getSuccessors 
    x,y = state 
**ValueError: too many values to unpack** 

getsuccessor의 FUNC의 코드는 다음과 같습니다

problem.getStartState() - (5, 5) 
problem.isGoalState(problem.getStartState())- False 
problem.getSuccessors(problem.getStartState()) - [((5, 4), 'South', 1), ((4, 5), 'West', 1)] 
+0

누군가 더 많은 정보가 필요하면 plz 알려주세요. – Shilpa

+1

@ Shilpa : 오류는 179 행에서 발생하므로 코드를 게시해야합니다. – sth

+0

179 줄은 x, y = 상태 내 질문을 편집했습니다. getSuccessor 함수를 참조하십시오. – Shilpa

답변

4

먼저, 그것의 :

def getSuccessors(self, state): 
    """ 
    Returns successor states, the actions they require, and a cost of 1. 

    """ 

    successors = [] 
    for action in [Directions.NORTH, Directions.SOUTH, Directions.EAST, Directions.WEST]: 
     x,y = state 
     dx, dy = Actions.directionToVector(action) 
     nextx, nexty = int(x + dx), int(y + dy) 
     if not self.walls[nextx][nexty]: 
     nextState = (nextx, nexty) 
     cost = self.costFn(nextState) 
     successors.append((nextState, action, cost)) 

값은 처음에이 기능에 대해 반환 있을 법하지 않다. 반환 값이 없기 때문에 구멍 getSuccessors 메서드를 사용하십시오.

짐작할 수 있듯이 getSuccessors은 (nextState, action, cost) 튜플 목록을 반환한다고 가정합니다. 각각의 노드를 노드로 저장하고 있습니다.이 노드를 메소드로 다시 전달하면 실패하고 세 값을 두 개로 압축 해제하려고 시도합니다.

괜찮은 디버거를 찾고 사용 방법을 배우려면 직접해야합니다. 나는 Eclipse (PyDev)을 사용하며, 이러한 종류의 버그에 큰 도움이 될 것입니다.

+0

질문을 편집했습니다. 이제 getsuccessor 함수를 볼 수 있습니다. 179 줄 x, y = 상태 – Shilpa

+0

또한이 코드는 바꿀 수 없습니다. 맨 위에있는 내 코드를 변경할 수 있습니다. – Shilpa

+0

예 ... 절대적으로 옳습니다. 그러나 나는 내 코드를 변경하는 것을 생각지 않는다. 내 코드를 어떻게 변경합니까? – Shilpa

0

불규칙한 크기의 튜플이 getSuccessors으로 전달되는 이유를 잘 모릅니다. 그러나 행 이후에 node 길이를 확인하여 문제를 해결할 수 있습니다. 3 인 경우 에 node[0]을 전달해야합니다.

+0

노드는 (5,5) initail 노드의 값을 저장하는 변수 일뿐입니다. 어떻게 길이를 확인합니까 .... print len ​​(node)? – Shilpa

+0

목표에 도달 한 작업 목록을 반환해야합니다. 그러면 어떤 가치가 돌아와야합니까? while 루프가 끝난 후에는 Return을 사용하지 않습니다. – Shilpa

관련 문제