파이썬 계산기 프로그램 질문



class calculator:
print("이 프로그램은 사칙연산 연산자 3개와 정수 피연산자 4개로 구성된 수식을 입력 받아 결과를 출력하는 프로그램입니다.")
def __init__(self): while True: num = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] operator = ["+", "-", "*", "/"] self.a = [] c = 0 oper = [] n = [] formula = input("사칙연산 (+, -, *, /) 연산자 3개 이하와 정수 피연산자 4개 이하로 구성된 수식을 입력하세요: ").replace(' ', '')
for i in formula: if i not in num and i not in operator: print("잘못 입력하였습니다.") calculator.__init__(self) return formula += "+" for i in range(len(formula)): if formula[i] in operator: self.a.append(formula[c:i]) self.a.append(formula[i]) n.append(formula[c:i]) oper.append(formula[i]) c = i + 1
del self.a[-1] del oper[-1]
for i in range(self.a.count('')): self.a.remove('') n.remove('')
for i in n: i = i.strip()
if self.a[0] == "-": if len(oper) == len(n): self.a[0] = self.a[0]+self.a[1] del self.a[1] else: print("잘못 입력하였습니다.") self.a.clear() n.clear() oper.clear() c = 0 continue else: if len(oper) + 1 != len(n): print("잘못 입력하였습니다.") self.a.clear() n.clear() oper.clear() c = 0 continue print(self.a) calculator.main(self) break def multiply(self, n): self.a[n] = int(self.a[n-1])*int(self.a[n+1]) del self.a[n-1] del self.a[n] return
def divide(self, n): self.a[n] = int(self.a[n-1])/int(self.a[n+1]) del self.a[n-1] del self.a[n] return def add(self, n): self.a[n] = int(self.a[n-1])+int(self.a[n+1]) del self.a[n-1] del self.a[n] return
def subtract(self, n): self.a[n] = int(self.a[n-1])-int(self.a[n+1]) del self.a[n-1] del self.a[n] return
def main(self): if len(self.a) == 1: print(self.a[0]) return elif self.a[1] == "*": calculator.multiply(self, 1) calculator.main(self) elif self.a[1] == "/": calculator.divide(self, 1) calculator.main(self)
elif len(self.a) >= 5: if self.a[3] == "*": calculator.multiply(self, 3) calculator.main(self)
elif self.a[3] == "/": calculator.divide(self, 3) calculator.main(self)
elif len(self.a) == 7: if self.a[5] == "*": calculator.multiply(self, 5) calculator.main(self)
elif self.a[5] == "/": calculator.divide(self, 5) calculator.main(self)
else: if self.a[1] == "+": calculator.add(self, 1) calculator.main(self)
elif self.a[1] == "-": calculator.subtract(self, 1) calculator.main(self) calculator()
사칙연산 수식을 문자열로 입력 받아서 eval 함수를 사용하지 않고 계산하는 코드를 짜기 위해 위와 같이 코드를 작성했습니다. 그런데 아래와 같이 입력하면 결과가 출력되지 않고 프로그램이 그냥 종료되어버립니다. (출력된 리스트는 확인 차 출력한 겁니다.) 왜 이러는 건가요? 다른 사칙연산 수식은 다 잘 계산되어 출력되는데, +/- -> +/- -> 곱셈/나누기 이 순서로 가는 수식은 그냥 프로그램이 종료되네요...

그리고 혹시 코드를 더 효율적으로 바꿀 수 있는 방법이 있으면 그것도 알려주시면 감사하겠습니다.
답변 1개
답변을 작성하려면 로그인이 필요합니다.
로그인