class Stack:
def __init__(self):
self.items = []
def __len__(self):
return len(self.items)
def is_empty(self):
return len(self.items) == 0
def push(self,e):
self.items.append(e)
def pop(self):
if self.is_empty():
raise Exception('Stack is empty')
else:
return self.items.pop()
def top(self):
if self.is_empty():
raise Exception('Stack is empty')
else:
return self.items[-1]
valStack = Stack()
opStack = Stack()
def repeatOps(refOp):
while ( len(valStack) > 1 or prec(refOp) <= prec(opStack.top()) ) :
doOP()
def EvalExp( exp ):
for e in exp:
if e in '0123456789':
valStack.push(e)
else:
if opStack.is_empty():
opStack.push(e)
else:
repeatOps(e)
opStack.push(e)
repeatOps('+')
print(valStack.top())
스택을 나타내는 클래스를 만들고 이것으로 전역 변수로 설정 함수에서 사용하는데 계속 초기화가 됩니다.
위의 소스가 일부분입니다. EvalExp 함수에서는 제대로 스택변수에 잘 쌓이는데 repeatOps함수의 opStack.top()에서 계속 스택이 비어있다고 뜹니다.
제가 객체지향이 처음이라 잘 모르는 건지는 모르겠는데 전역변수로 설정을 해도 불러 올때마다 초기화를 시키는 것이라 그런건지 잘 모르겠습니다. 어떻게 하면 초기화가 안되는지 궁금합니다.
위 코드는 스택을 이용한 계산기입니다.