문제
Python 모듈을 작성하여 두 개의 숫자를 입력받아 사칙연산 결과를 출력하는 프로그램을 구현할 것.
- 모듈의 설계 및 기능 요구 사항:
- 두 숫자에 대한 사칙연산(덧셈, 뺄셈, 곱셈, 나눗셈)을 수행하는 함수를 모듈 내에 정의할 것.
- 각 사칙연산을 담당하는 함수를 다른 Python 파일에서 import하여 사용할 수 있도록 할 것.
- 연산 과정에서 발생할 수 있는 예외를 함수 내에서 처리할 것:
- 예외 발생 시, None을 반환.
- 예외 없이 정상적으로 수행되면, 연산 결과(float 타입)를 반환.
- 모듈이 메인 스크립트로 실행되는 경우:
- 사용자로부터 두 개의 숫자와 연산 종류(+, -, *, /)를 입력받아 해당 연산의 결과를 출력할 것.
- 사용자는 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()
'Python' 카테고리의 다른 글
[DIP] Block Truncation Coding (BTC) (0) | 2024.11.18 |
---|---|
[Py] Queue 와 Stack 구현하기: 상속과 오버라이딩 이용. (0) | 2024.11.13 |
[ML] Classic Regressor (Summary) (0) | 2024.10.02 |
[Py] Debug: Error and Exception. (1) | 2024.09.25 |
[Py] Debugging: pdb and ipdb (0) | 2024.09.25 |