반환문

반응형

3.4. 반환문(return)

여러분, 함수가 무엇일까요? 지금까지 머리 아프게 함수를 공부했는데 또 무슨 소리냐구요?

물론 함수에 대해 계속 배워왔지만, 결정적으로 빠진 내용이 하나 있습니다. 사실은 우리가 초등학교 때부터 배워왔던 것이기도 하구요. 과연 그것이 무엇일까요?

이 그림 낯익으시죠? 함수에 x를 집어 넣으면 함수가 주물럭주물럭 계산해서 y라는 값을 돌려주는 그림입니다.

함수에 값을 넣으면 함수는 계산된 값을 돌려준다. 이것이 바로 함수의 핵심이지요. 프로그래밍에서도 마찬가지입니다. 지금까지 우리가 만든 함수들은 일은 열심히 하지만 돌려주는 것은 없었지요.

그렇다면 이젠 일도 하고 결과를 돌려주기도 하는 함수를 만들어 봐야겠죠?

>>> def function(x):
...   a = 3
...   b = 5
...   y = a * x + b
...   return y                     # y 값을 돌려준다
...
>>> c = function(10)
>>> c
35

위의 그림과 같은 역할을 하는 함수를 만들어봤습니다. 값을 돌려주기 위해 return 이라는 것이 쓰였지요? 이렇게 만들어진 함수에 10이라는 인자를 넣어주면 함수는 35라는 값을 돌려줍니다. 따라서, 그 값을 다시 c라는 변수에 넣을 수도 있는 거죠.

만약, 함수를 정의할 때 return y 대신에 print(y)라고 썼다면 어떻게 될까요?

>>> def function2(x):
...     a = 3
...     b = 5
...     y = a * x + b
...     print(y)                     # y 값을 출력한다
...
>>> d = function2(10)
35
>>> d
>>>

d = function2(10) 이라고 하면 함수가 실행되면서 35라는 값을 출력하지만 d에게 돌려주지는 못하죠. 그래서 d를 찍어보면 아무 값도 나오지 않습니다.

어떠세요? 이제 함수가 값을 돌려주는 것에 대해서 이해가 되시나요? 그렇다면 여러분께서 값을 돌려주는 함수를 직접 만들어 보실 차례입니다.

삼각형의 넓이를 구하는 함수를 만들어보세요.

함수의 인자로는 삼각형의 밑변과 높이가 주어지고, return되는 값은 삼각형의 넓이가 되는 겁니다. 간단하겠죠?

문제를 풀어보신 분께는 신기한 것을 하나 알려드리겠습니다.

아직 안 풀어보셨으면 빨리 해보세요.

다 풀어보셨죠? 그럼, 알려드리도록 하겠습니다.

참과 거짓

1 더하기 1은 2 맞죠? '참', '거짓'으로 대답해보세요.

'참'이라고 대답하셨나요?

그럼 파이썬은 이 질문에 어떻게 대답할까요?

>>> 1 + 1 == 2
True

참이라고 답을 하네요.

>>> 1 + 1 == 3
False

이건 거짓이라고 하구요.

다음의 if 문을 보세요.

1 + 1이 2가 맞으면 'yes'라고 대답하고, 그렇지 않으면 'no'라고 대답하겠죠?

>>> if 1 + 1 == 2:
...     print('yes')
... else:
...     print('no')
...
yes

방금 알려드린 것과 함께 생각을 해보면

1 + 1 == 2라는 식이 True(참)이면 'yes'를 찍고, False(거짓)이면 'no'를 찍는다는 걸 알 수 있습니다.

우리가 함수를 만들 때 이런 성질을 활용하면 도움이 되겠죠?

>>> def exam():
...   ans = raw_input('1 + 2 = ')
...   return 1 + 2 == int(ans)
...
>>> exam()
1 + 2 = 3
True
>>> exam()
1 + 2 = 4
False

위 예제는 시험을 치는 프로그램을 만든 것입니다.

raw_input() 이라는 함수는 사용자로부터 문자열 입력을 받는데 쓰이구요, int() 함수는 문자열을 정수로 바꿔줍니다. 예제에서는 raw_input() 함수가 '1 + 2 = ' 이라는 문자열을 출력한 다음 사용자로부터 문자열을 입력 받아 그 값을 ans라는 변수에 넣어줬습니다.

셋째 줄에서는 1 + 2의 값과 int(ans)의 값이 같은지의 여부(참, 거짓)를 return 하구요.

return 값으로는 True나 False를 돌려주겠죠?

문제를 제대로 풀면 True를 돌려주고, 틀리면 False를 돌려주는 것이죠. 이해가 되시는지요? 그럼 한 번 만들어서 테스트해보세요. 재미있죠?

우리가 배워온 것들이 점점 그럴 듯하게 모양을 갖춰가는 것 같네요.