본문 바로가기
Python

[Py] 사칙연산 구현 예제

by ds31x 2024. 11. 13.

문제

Python 모듈을 작성하여 두 개의 숫자를 입력받아 사칙연산 결과를 출력하는 프로그램을 구현할 것.

  1. 모듈의 설계 및 기능 요구 사항:
    • 두 숫자에 대한 사칙연산(덧셈, 뺄셈, 곱셈, 나눗셈)을 수행하는 함수를 모듈 내에 정의할 것.
    • 각 사칙연산을 담당하는 함수를 다른 Python 파일에서 import하여 사용할 수 있도록 할 것.
    • 연산 과정에서 발생할 수 있는 예외를 함수 내에서 처리할 것:
      • 예외 발생 시, None을 반환.
      • 예외 없이 정상적으로 수행되면, 연산 결과(float 타입)를 반환.
  2. 모듈이 메인 스크립트로 실행되는 경우:
    • 사용자로부터 두 개의 숫자와 연산 종류(+, -, *, /)를 입력받아 해당 연산의 결과를 출력할 것.
    • 사용자는 q를 입력하여 프로그램을 종료할 수 있으며, 그 외의 경우 계속해서 입력받아 반복 수행할 것.
    • 올바르지 않은 입력이나 예외 상황 발생 시 적절한 오류 메시지를 출력하고 다시 입력을 받도록 할 것.

참고

위의 요구 사항을 바탕으로, 사칙연산을 처리하는 Python 모듈을 다음의 코드를 기반으로 작성해볼 것.

  • 다음 코드에서 덧셈과 뺄셈, 곱셈을 수행하는 function들을 추가하고,
  • 이를 사용하도록 main_func 함수 부분을 수정해볼 것.
# my_arithmetic_op.py

def divide_numbers(num1, num2):
    """
    두 숫자를 입력받아 나눗셈 결과를 반환합니다.
    예외 발생 시 None을 반환합니다.
    """
    try:
        result = float(num1) / float(num2)
        return result
    except ZeroDivisionError:
        print("오류: 0으로 나눌 수 없습니다.")
    except ValueError:
        print("오류: 숫자가 아닌 값을 입력했습니다.")
    except Exception as e:
        print(f"예상치 못한 오류가 발생했습니다: {e}")
    return None

def main_func():
    while True:
        # 사용자로부터 입력받기
        num1 = input("첫 번째 숫자를 입력하세요 (종료: q): ")
        if num1.lower() == 'q':
            print("프로그램을 종료합니다.")
            break

        num2 = input("두 번째 숫자를 입력하세요 (종료: q): ")
        if num2.lower() == 'q':
            print("프로그램을 종료합니다.")
            break

        op_input = input("연산자를 선택하세요. [1:+, 2:-, 3:*, 4:/, q: 종료]:")
        if op_input.lower() == 'q':
            print("프로그램을 종료합니다.")
            break
        while op_input not in ["1","2","3","4"]:
            print(f'입력하신 [{op_input}]는 지원하지 않습니다. 1에서 4까지 중에 하나를 입력하세요.')
        op = int(op_input)

        op_str = None # None 으로 초기화.
        result = None # None 으로 초기화.

        if op == 1:
            #TODO 덧셈 구현하여 처리할 것.
            op_str = "+"
            print('not implemented!')
        elif op == 2:
            #TODO 뺄셈 구현하여 처리할 것.
            op_str = "-"
            print('not implemented!')
        elif op == 3:
            #TODO 곱셈 구현하여 처리할 것.
            op_str = "*"
            print('not implemented!')
        else:
            # 나눗셈 수행 및 결과 출력
            op_str = "/"
            result = divide_numbers(num1, num2)
        if result is not None:
            print(f"{num1} {op_str} {num2} = {result}")
        else:
            print(f"연산에 실패했습니다: {num1} {op_str} {num2}")

if __name__ == "__main__":
    main_func()