-
[Python 자료구조 #스택1] 소스 파일에서 괄호 검사Programming 기초/Python 2023. 5. 6. 03:54
1. 스택을 클래스로 구현하고
2. 파일 내에서 괄호를 검사하는 checkBracketsV2() 함수를 정의.
3. 파일을 읽기모드로 열어서 줄 단위로 리스트를 만들고
4. 만들어진 리스트에 checkBracketsV2() 함수를 호출하여 검사한다.
아래 코드블럭에서는 소스파일 대신 txt파일을 불러왔다.
class Stack: def __init__(self): self.top = [] def __str__(self): return str(self.top) def isEmpty(self): return len(self.top) == 0 def size(self): return len(self.top) def clear(self): self.top = [] def push(self, item): self.top.append(item) def pop(self): if not self.isEmpty(): return self.top.pop(-1) def peek(self): # peek 메소드는 맨 뒤의 항목을 삭제하지 않고 반환한다 if not self.isEmpty(): return self.top[-1] def checkBracketsV2(lines): # 스택 준비 stack = Stack() # 입력 문자를 하나씩 읽어 왼쪽 괄호를 만나면 스택 저장 for line in lines: # 모든 줄 중에 한 줄씩 for ch in line: # 한 줄 중에 한 글자씩 if ch in ('{', '[', '('): # ch 가 {, [, ( 에 포함된다면 stack.push(ch) # 스택에 값 삽입 elif ch in ('}', ']', ')'): # ch 가 }, ], )에 포함된다면 if stack.isEmpty(): # 스택이 공백인지 확인 return False # 공백이면 false 반환 else: # 공백이 아니라면 pop_result = stack.pop() # 스택의 맨 마지막 값 꺼내기 if ((ch == ')' and pop_result != '(') or (ch == '}' and pop_result != '{') or (ch == ']' and pop_result != '[')): return False return stack.isEmpty() filename = "text.txt" # 괄호를 검사할 소스 파일 infile = open("C:/coding/"+filename, "r", encoding="UTF-8") # 파일 열기 lines = infile.readlines() # 파일 전체를 라인별로 읽은 리스트 infile.close() #파일 닫기 result = checkBracketsV2(lines) # 검사 함수 호출 print(filename, "--->", result) # 결과 출력
실제 소스파일의 괄호를 검사하는 프로그램을 만든다고 하면 checkBracketsV2()로는 역부족이다.
소스파일 특성상 검사할 필요가 없는 설명글(#)을 포함한 모든 글자를 검사하기에 설명글에서 'FALSE' 판정을 받을 수도 있기 때문이다. (문자열 내의 글자도 마찬가지로 검사할 필요가 없음에도 검사 대상이 된다.)
'Programming 기초 > Python' 카테고리의 다른 글
[Python 자료구조 #스택3] 미로 탐색 (1) 2023.05.10 [Python 자료구조 #스택2] 스택을 이용한 중위표기 수식의 후위표기 변환 (0) 2023.05.06 [Python 기초 #10] 예외 처리 (1) 2023.04.27 [Python 기초 #9] 패키지 (0) 2023.04.27 [Python 기초 #8] 모듈 (0) 2023.04.25