간단한 수학 문장제 문제를 분석하고 계산해서 답을 정수로 반환해요.
연산이 없는 문제는 주어진 숫자가 그대로 답이 돼요.
What is 5?
5로 계산돼요.
두 숫자를 더해요.
What is 5 plus 13?
18로 계산돼요.
큰 숫자와 음수도 처리해요.
이제 나머지 세 가지 연산도 해봐요.
What is 7 minus 5?
2
What is 6 multiplied by 4?
24
What is 25 divided by 5?
5
연산이 여러 개인 문제도 순서대로 처리해요.
이 문제들은 말로 표현된 문장제 문제이므로, 일반적인 연산 순서는 무시하고 식을 왼쪽에서 오른쪽으로 계산해요.
What is 5 plus 13 plus 6?
24
What is 3 plus 2 multiplied by 3?
15 (즉, 9가 아니에요)
파서는 다음 입력을 거부해야 해요.
때로는 예외를 발생시켜야 하는 경우가 있어요. 이때는 오류의 원인이 무엇인지 알 수 있도록 의미 있는 오류 메시지를 항상 함께 넣어야 해요. 그래야 코드가 더 읽기 쉬워지고 디버깅에도 큰 도움이 돼요. 오류 원인이 특정 유형이라는 것을 알고 있는 상황이라면 내장 오류 유형 중 하나를 골라 발생시켜도 되지만, 그래도 의미 있는 메시지는 꼭 함께 넣어야 해요.
이 연습 문제에서는 answer()에 전달된 질문이 잘못되었거나 유효하지 않거나, 알 수 없는 연산을 포함하고 있을 때 ValueError를 "던지기" 위해 raise문을 사용해야 해요. 테스트는 exception을 raise하면서 메시지도 함께 넣을 때만 통과해요.
참고하세요: 같은 _오류 유형_을 발생시키더라도 상황마다 필요한 메시지가 달라요.
테스트를 꼼꼼히 확인해요.
메시지와 함께 ValueError를 발생시키려면, 메시지를 exception 타입의 인자로 작성해요:
# if the question contains an unknown operation.
raise ValueError("unknown operation")
# if the question is malformed or invalid.
raise ValueError("syntax error")
특정 코드 블록 안에서 발생한 오류를 _처리_하려면 try-except를 사용할 수 있어요.
try-except 블록은 오류를 일으킬 수 있는 코드를 "감싸서", 모든 예외를 하나의 오류로, 여러 오류로, 또는 문제를 해결할 다른 코드 조각으로 연결해 줘요:
while len(equation) > 1:
try:
# The questionable/error-prone code goes here,in an indented block
# It can contain statements, loops, if-else blocks, or other executable code.
x_value, operation, y_value, *rest = equation
...
...
except:
# Code for what to do when an error gets thrown in the code above.
# This could be one error, or more complicated logging, error checking and messaging.
raise ValueError("syntax error")
Exercism에 가입하고 Python 트랙을 개념 17개연습 문제 146개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.