-
[파이썬/Python] 백준 10869번(사칙연산) - 단계별로 풀어보기 + [간단한 오류 잡기(feat. 나눗셈)]깜빡의 취미/파이썬을 합니다. 2021. 7. 4. 12:00728x90
문제는 아래와 같다.
이미 앞선 네 문제를 통해 충분히 연습을 했을 테니, 이 문제는 그냥 앞의 문제들을 조합하는 것에 지나지 않는다. 심지어 문제에서 어떤 기호를 써야 하는지까지 친절하게 말해주고 있다. 빠르게 예시 답안을 공유하고자 한다.
[답안 예시 1] A,B=map(int,input().split()) a = int(A) b = int(B) print(a+b) print(a-b) print(a*b) print(a//b) print(a%b)
여담이지만 전 대문자 소문자를 계속 구분하기가 너무 귀찮습니다. caps lock 누르면 새끼손가락
에 경련 올 것 같습니다이 금세 피로해집니다.[답안 예시 2] a,b=map(int,input().split()) print(a+b) print(a-b) print(a*b) print(a//b) print(a%b)
유일한 함정 포인트라면 'a//b' 지점이 될텐데, 뇌를 비우고 'a/b'라고, 문제에 쓰여 있는 대로 곧이곧대로 썼다가 낭패를 볼 수 있다. 실제로 필자 또한 낭패를 봐서, 오점을 남기고 말았다.
사실 이 문제에는 조건이 있다. 아무래도 'a//b'나 'a%b'가 나눗셈이다 보니, 특히 b가 0이 되면 안 된다. 굳이 궁금해서 한 번 시도해 봤다. 답안 예시 2를 적용한 상태로 파일을 돌려 보았다.
12 0 12 12 0 Traceback (most recent call last): File "C:\Users\이승준\PycharmProjects\pythonProject\실험장.py", line 5, in <module> print(a//b) ZeroDivisionError: integer division or modulo by zero
'ZeroDivisionError'는 간단히 말해서 0으로 나누기를 하였을 때 생기는 오류다. 사칙연산에서 어떤 숫자를 0으로 나누는 것 자체가 불가능하기 때문에, 이렇게 오류를 통해 막아주는 것이다.
그렇지만 개인적으로는 이런 복잡한 오류보다 직관적인 메시지가 더 효과적이다. 그래서 답안 예시 2에 약간의 변형을 가해 보기로 했다.
[답안 예시3] a,b=map(int,input().split()) print(a+b) print(a-b) print(a*b) try: -> 아래 나눗셈을 실행해 보시고요. print(a//b) print(a%b) except ZeroDivisionError: -> 혹시 'ZeroDivisionError'가 뜨잖아요? print("조건 다시 보고 오세요, 아시겠어요?") -> 이렇게 해 주세요!
try... except... 구문은 오류가 발생했을 때 오류 구문 대신 다른 행동을 할 수 있도록 도와준다. 앞서 ZeroDivisionError가 일어날 수 있는 상황(나눗셈)을 알아냈으니, 해당 상황에 구문을 적용해 보았다.
적용하면 아래와 같이 된다.
12 0 12 12 0 조건 다시 보고 오세요, 아시겠어요?
오류 구문을 좀 더 구체적으로 활용하면 문제에 등장한 조건을 아예 특정지을 수도 있다. 앞선 글들에 충분히 다루어 두었으니, 참고해 주시길.
다음 글은 좀 더 직관적이고, 이해하기 쉬운 녀석으로 준비해 보겠습니다. 앞으로도 더 나아지겠습니다. 감사합니다.
글이 괜찮았다면 공감, 댓글 부탁드릴게요!
'깜빡의 취미 > 파이썬을 합니다.' 카테고리의 다른 글