coding/Project

[Python] 활용편 - 07 - try / except 활용(계산기 심화)

양한마리 2022. 9. 14. 20:39
728x90


:: 파이썬 과제 - try / except 활용 ::

1.  계산기 심화

try / except

 


1.  계산기 심화

요구조건

  • 클래스를 활용해 작성했던 계산기 코드를 활용해주세요
  • 기존처럼 사용자의 입력을 받고 출력하되, try / except를 활용해 사용자의 입력을 검증하는 코드를 추가해주세요
    • 두 번쨰 숫자에 0을 입력하고 나누기를 시도할 경우 “0으로 나눌 수 없습니다” 문구를 출력해주세요
    • 숫자가 아닌 다른 값을 입력했을 경우 “숫자만 입력 가능합니다” 라는 문구를 출력해 주세요

풀이)

# 클래스 함수 선언
class Calc():

    # def __init__(self):  # __init__ 함수로 선택 목록을 인스턴스 실행시 보여준다.
    #     print("\n"
    #           ":: 목록 ::\n"
    #           "===========================\n"
    #           "1.계산기\n"
    #           "0.Quit\n"
    #           "===========================\n")

    def operator(self, num1, operator, num2): # 계산할 수와 기호를 받아오는 메소드
        self.num1 = num1 # 숫자 1
        self.num2 = num2 # 숫자 2
        self.operator = operator # 기호

        if operator == "+": # 더하기 메소드
            self.num3 = self.num1 + self.num2
            return self.num3

        elif operator == "-": # 빼기 메소드
            self.num3 = self.num1 - self.num2
            return self.num3

        elif operator == "*": # 곱하기 메소드
            self.num3 = self.num1 * self.num2
            return self.num3

        elif operator == "/": # 나누기 메소드
            try: # try / except 활용하여 나누기 메소드에 예외처리
                self.num3 = self.num1 / self.num2
                return self.num3
            except ZeroDivisionError: # error 중에 0으로 나오는 error 처리
                self.zero_error = "0으로는 나눌수 없습니다." # 출력할 텍스트도 변수에 담아 처리
                return self.zero_error # print는 None이라는 값을 추가로 출력하기 때문에 이렇게 return으로 처리
            except:
                pass

def On_Off() : # 반복문에서 종료, 재시작을 선택하는 함수
    result = int(input("\n"
                       "Off(1) - 종료 / On(2) - 재시작 : "))
    if result == 2:
        pass
    elif result == 1:
        print("종료합니다.")
        quit() # 종료하는 함수



# input에  들어가는 메세지를 정리
input_msg_01 = "\n:: 계산기 ::\n===========================\n'A * B' 형식으로 수식을 입력하세요 : "
error_msg_01 = "\n:: 사칙연산 목록 ::\n===========================\nA + B\nA - B\nA * B\nA / B\n===========================\n양식을 지켜서 다시 입력하세요.\n"


while True :
    print("\n"
          ":: 목록 ::\n"
          "===========================\n"
          "1.계산기\n"
          "0.Quit\n"
          "===========================\n")
    N = int(input("목록에서 원하는 번호를 입력하세요 : "))

    if N == 1 :
        while True :
            calc = Calc() # 인스턴스 생성

            try : # try / except 활용하여 잘못된 input값 예외처리
                num1, operator, num2 = input(input_msg_01).split()
                equality = calc.operator(int(num1), str(operator), int(num2))
            except:
                print(error_msg_01)  # Error 메시지 출력
                continue

            if equality == "0으로는 나눌수 없습니다." : # 0으로 나눌시 받아온 메소드 값 예외처리
                print(equality)

            else :
                print(f"정답 : {num1} {operator} {num2} = {equality}\n" # 정상
                      "===========================\n"
                      "\n")
                On_Off() # 반복문에서 종료, 재시작을 선택하는 함수

    elif N == 0 :
        print("종료합니다.")
        break

    else :
        print("잘못 입력하셨습니다.")

실행 예시)

:: 목록 ::
===========================
1.계산기
0.Quit
===========================

목록에서 원하는 번호를 입력하세요 : 1 # <-- 입력 --

:: 계산기 ::
===========================
'A * B' 형식으로 수식을 입력하세요 : 100 + 32 # <-- 입력 --
정답 : 100 + 32 = 132
===========================



Off(1) - 종료 / On(2) - 재시작 : 2 # <-- 입력 --

:: 계산기 ::
===========================
'A * B' 형식으로 수식을 입력하세요 : 30 /4 # <-- 입력 --

:: 사칙연산 목록 ::
===========================
A + B
A - B
A * B
A / B
===========================
양식을 지켜서 다시 입력하세요. # Error 메시지


:: 계산기 ::
===========================
'A * B' 형식으로 수식을 입력하세요 : a - b # <-- 입력 --

:: 사칙연산 목록 ::
===========================
A + B
A - B
A * B
A / B
===========================
양식을 지켜서 다시 입력하세요. # Error 메시지


:: 계산기 ::
===========================
'A * B' 형식으로 수식을 입력하세요 : 100 / 0 # <-- 입력 --
0으로는 나눌수 없습니다. # Error 메시지

:: 계산기 ::
===========================
'A * B' 형식으로 수식을 입력하세요 : 439 * 43 # <-- 입력 --
정답 : 439 * 43 = 18877
===========================



Off(1) - 종료 / On(2) - 재시작 : 1 # <-- 입력 --
종료합니다.

종료 코드 0(으)로 완료된 프로세스

 

728x90
반응형