예전에 작성한 스택 내용을 다시 정리해본다.
괄호 오류를 찾아내는 프로그램
# | 괄호 오류 체크 프로그램 |
# 괄호 에러 체크하는 클래스 정의
class Syntax_check():
# 괄호 정의
opening_brace = ['(', '{', '[' ]
closing_brace = [')', '}', ']' ]
# 스택 리스트 초기화
def __init__(self):
self.stack_list = []
def error_check(self, sentence):
sentence = list(sentence)
for letter in sentence:
# 여는 괄호가 입력되면 stack에 넣는다.
if letter in self.opening_brace:
self.stack_list.append(letter)
# 닫는 괄호가 입력되었을 때
elif letter in self.closing_brace:
# ')' 괄호가 입력됐다면
if letter == self.closing_brace[0] and self.stack_list:
self.stack_list.pop()
# '}' 괄호가 입력됐다면
elif letter == self.closing_brace[1] and self.stack_list:
self.stack_list.pop()
# ']' 괄호가 입력됐다면
elif letter == self.closing_brace[2] and self.stack_list:
self.stack_list.pop()
else:
# '닫는 괄호' 먼저 사용된 경우
print("에러 원인 -> ", letter)
return 0
letter = None
# 스택에 여는 괄호가 남았다면, 괄호 짝의 개수 불일치 경우
length = len(self.stack_list)
if self.stack_list:
print("여는 괄호가 남았습니다.")
return self.stack_list
# 스택에 여는 괄호가 없고, 닫는 괄호가 남아있을 경우
else:
if letter == self.closing_brace[0]:
return 4
elif letter == self.closing_brace[1]:
return 5
elif letter == self.closing_brace[2]:
return 6
else:
return 7
# (main) 프로그램 시작!
# 괄호 에러 체크하는 클래스 선언
syntax_check = Syntax_check()
# 사용자 입력란 : '' 사용할 것.
user_input = 'list = [random.randrange(1, 10,1 ) for _ in range(10)]'
# 에러 체크 함수 구동
result = syntax_check.error_check(user_input)
# 결과 판별
if result == 0:
print("여는 괄호 수정 필요")
elif result == 1:
print("( ) 괄호 사용 실수" )
elif result == 2:
print("{ } 괄호 사용 실수" )
elif result == 3:
print("[] 괄호 사용 실수" )
elif result ==4:
print("("" 괄호 수정 필요")
elif result ==5:
print("{"" 괄호 수정 필요")
elif result ==6:
print("["" 괄호 수정 필요")
elif result == 7:
print("괄호 사용 문제없습니다.")
else:
print(result, "여는 괄호 수정 필요")
class Syntax_check():
# 괄호 정의
opening_brace = ['(', '{', '[' ]
closing_brace = [')', '}', ']' ]
# 스택 리스트 초기화
def __init__(self):
self.stack_list = []
클래스명은 'Syntax_check' 다.
def error_check(self, sentence):
sentence = list(sentence)
sentence를 입력받으면,
str -> list로 변환함으로써
향후 반복문으로 하나하나의 문자에 접근할 수 있도록 했다.
for letter in sentence:
# [1] 여는 괄호가 입력되면 stack에 넣는다.
if letter in self.opening_brace:
self.stack_list.append(letter)
# [2] 닫는 괄호가 입력되었을 때
elif letter in self.closing_brace:
# 1) ')' 괄호가 입력됐다면
if letter == self.closing_brace[0] and self.stack_list:
self.stack_list.pop()
# 2) '}' 괄호가 입력됐다면
elif letter == self.closing_brace[1] and self.stack_list:
self.stack_list.pop()
# 3) ']' 괄호가 입력됐다면
elif letter == self.closing_brace[2] and self.stack_list:
self.stack_list.pop()
(중략)
판별하는 부분은 좀 더 검증이 필요하다.
완료 후 재업로드 내용 보충 예정