파이썬 프로그램 오류 발생했는데 원인을 알수 없어 문의 합니다.
2020.08.07
763
# -*- coding: utf-8 -*-
"""
Spyder Editor
This is a temporary script file.
"""
#상태를 나타내는 클래스
class State:
def _init_(self, board,goal, moves=0):
self.board = board
self.moves = moves
self.goal = goal
# i1과 i2를 교환하여서 새로운 상태를 반환한다.
def get_new_board(self, i1, i2, moves):
new_board = self.board[:]
new_board[i1], new_board[i2] = new_board[i2], new_board[i1]
return State(new_board, self.goal, moves)
#자식노드를 확장하여서 리스트에 저장하여서 반환한다.
def expand(self, moves):
result = []
i = self.board.index(0) #숫자 0(빈칸)의 위치를 찾는다.
if not i in [0,1,2] : #up 연산자
result.append(self.get_new_board(i, i-3, moves))
if not i in [0,3,6] : #left 연산자
result.append(self.get_new_board(i, i-1, moves))
if not i in [2,5,8] : #right 연산자
result.append(self.get_new_board(i, i+1, moves))
if not i in [6,7,8] : #down 연산자
result.append(self.get_new_board(i, i+3, moves))
return result
#객체를 출력할 때 사용한다.
def _str_(self):
return str(self.board[:3]) +"\n"+\
str(self.board[3:6]) +"\n"+ \
str(self.board[6:]) +"\n"+ \
"----------------------"
#초기상태
puzzle = [1,2,3,
0,4,6,
7,5,8]
#목표상태
goal = [1,2,3,
4,5,6,
7,8,0]
#open 리스트
open_queue=[ ]
open_queue.append(State(puzzle,goal)) #// 오류 발생 라인
closed_queue=[ ]
moves = 0
while len(open_queue) != 0:
# 디버깅을 위한 코드
# print(START OF OPENQ")
# for elem in open_queue:
# print(elem)
# print("END OF OPENQ")
current = open_queue.pop(0) #open 리스트의 앞에서 삭제
print(current)
if current.board == goal :
print("탐색 성공")
break
moves = current.moves+1
closed_queue.append(current)
for state in current.expend(moves):
if (state in closed_queue) or (state in open_queue): #이미 거처간 노드이면
continue # 노드를 버린다.
else:
open_queue.append(state) # open 리스트이 끝에 추가
<< 인공지능 : 파이썬으로 배우는 머신러닝과 딥러닝 , 천인국 지음 >>
<< 오류 내요 >>
File "F:\EDU_2020\02. anaconda\f01_temp.py", line 53, in
open_queue.append(State(puzzle,goal))
TypeError: State() takes no arguments