제어구조 반복문

반응형

2.1. 반복문(while)

오늘은 한석봉 이야기를 해보겠습니다.

큰 뜻을 품고 어머니를 떠나 숫자공부를 하던 석봉은 어머니가 너무 그리워 집을 찾아갔지요. 돌아온 석봉을 본 어머니는 말씀하셨습니다.

"나는 떡을 썰 테니, 너는 글을 쓰거라."

불을 끈 어머니는 떡을 썰기 시작합니다. 어머니는 내일 아침에 아들에게 떡국을 끓여주려고 길다란 떡을 써셨던 것 같습니다. 그 동안에 석봉은 지금까지 연마한 실력을 총동원하여 1부터 10까지 숫자를 씁니다.

1, 2, 3, …

이 상황을 파이썬으로 만드려면 어떻게 하는 것이 좋을까요? 지금까지 배웠던 것만 가지고 해볼까요?

>>> print(1)
1
>>> print(2)
2
>>> print(3)
3
>>>
…

좀 귀찮기는 해도 쓸만하지요? 그런데, 어머니께서 1부터 100까지 써보라고 하십니다. 아, 막막합니다. 어느 세월에 다 씁니까. 100까지 쓰면 아침이 밝아오겠군요.

이럴 땐 다른 방법을 찾아야겠지요? 오늘 그 비밀을 알려드리려고 합니다.

바로 while이라는 녀석입니다.

1,2,3, … , 98, 99, 100

1부터 100까지는 저런 모양이 될텐데요, 가만 보면 다음에 나오는 숫자는 앞의 숫자보다 1이 더 큽니다. 다시 말하면 앞의 숫자에 1을 더하면 다음 숫자가 나온다는 것이지요. 그러니까 계속 앞의 숫자에 1을 더해나가다가 100까지 쓰고 그만두면 되는 겁니다.

다음을 잘 보세요.

>>> num = 1
>>> while num <= 100:
...     print(num)
...     num = num + 1
...

우리가 쓸 숫자를 num이라고 했구요, 여기에 1을 넣어주었습니다. 이해가 잘 안 되시는 분은 변수 강좌를 다시 한 번 보세요.

그 다음에 while이라는 것이 나오죠? while은 우리말로 '…하는 동안에'라는 뜻을 갖고 있죠? 여기서는 'num이 100보다 작거나 같은 동안에'라는 뜻으로 쓴 것입니다.

아직 알쏭달쏭하시죠? 일단 다음 문장으로 넘어가보도록 하겠습니다.

    print(num)      # 처음 네 칸을 띄어 써주세요

num이라는 변수에 들어있는 수를 화면에 뿌려달라는 것입니다. 지금까지의 강좌 내용을 이해하셨다면 이해하실 겁니다. 지금 num에는 1이 들어있으니 당근 1을 찍어주겠지요. while 블록 내부에 있다는 표시로 공백 네 칸을 써서 들여쓰기 해주세요.

그 다음 문장을 봅시다.

    num = num + 1   # 윗줄과 들여쓰기를 맞춰주세요

이번엔 진짜로 이상한 것이 나왔습니다. num이 1이라면 1 = 1 + 1 이 된다는 얼토당토 않은 소리군요. 그런데 프로그래밍에서 = 표시는 '같다'는 뜻 말고 다른 뜻을 갖고 있습니다.

제 시계가 백만원이라는 것을 어떻게 표현했지요?

그렇죠, watch = 1000000 입니다. 이 것은 watch라는 변수에 1000000 이라는 값을 넣어주라는 뜻이었습니다. 조금 전에 num = num + 1이라고 쓴 것은 num이라는 변수가 가진 값에 1을 더해서 다시 num에게 넣어주라는 의미입니다.

그래도 이해가 안 되신다면 다른 걸 보여드리도록 하지요.

>>> a = 3
>>> b = a + 2

위의 문장을 보세요. b의 값이 얼마가 되었을까요? 이제 이해가 가시겠죠?

자, 설명을 드리다보니 이야기가 잠시 딴 데로 샜습니다. 보시기 편하도록 앞의 while 문 예제를 다시 한번 써볼게요.

>>> num = 1
>>> while num <= 100:
...     print(num)
...     num = num + 1
...

while은 어떤 조건이 만족되는 동안 그 아래에 쓴 문장들을 반복하는 기능을 갖고 있습니다. 여기서는 num이 100 이 될 때까지 print(num)과 num = num + 1을 반복하는 것이지요. 제가 반복을 해보겠습니다.

처음엔 num 값이 1 이니까 100보다 작습니다. 그렇다면 그 다음 문장을 수행해야겠지요?

print(num) 이니까 화면에 1을 찍고 num = num + 1해서 num은 2가 됩니다.

그리고는 다시 위의 while로 돌아가지요.

그러면 num 값이 2 이므로 print(num)이 2를 찍고 num = num + 1해서 num은 3이 됩니다.

그 다음엔 num 값이 3 이므로 print(num) 이 3을 찍고 num = num + 1해서 num은 4가 됩니다.

그 다음엔 num 값이 4 이므로 print(num) 이 4를 찍고 num = num + 1해서 num은 5가 됩니다.

헉헉헉…

그 다음엔,… 헉헉헉…

그렇게 하다보면 언젠가는 num 값이 99까지 올라갑니다. 이번에도 100보다는 작으니까 또 99 찍고, num은 드디어 100 되지요. 이제 또 다시 while문으로 갑니다. while 다음에 뭐라고 써있죠?

num <= 100:

그렇습니다. num이 100보다 작거나 같을 때 조건을 만족하는 겁니다. 그러면 하던 일을 계속해야겠죠? print(num)하면 화면에 100을 찍고 num = num + 1해서 num에는 101 이 들어갑니다. 그 다음에 while을 만나면 이번엔 num이 100보다 크니까 그 다음의 문장을 수행하지 않고 끝이 나고야 맙니다.

썰렁~.

우리는 머리를 약간 굴리고 프로그램 네 줄만 치면 1부터 100까지가 아니라 백만, 천만, 억까지도 숫자를 쓸 수 있는 것입니다. 놀랍지 않습니까, 여러분? 믿기지 않으신다구요? 그럼 한 번 따라해보실까요?

먼저 파이썬 프로그램을 띄우시구요, 처음 두 문장을 쳐보세요. while 문 마지막에 콜론(:)이 꼭 들어가야하니 빼먹지 마시구요.

>>> num = 1
>>> while num <= 100:
...

둘째 줄까지 치면 다음 줄에 점 세 개가 자동으로 나타납니다. while 문은 여러 줄로 구성되기 때문에 다음 줄을 계속 입력하라는 뜻으로 나타나는 것이지요.

그럼 다음 줄을 입력하겠습니다. 점 세 개 뒤에 바로 쓰지 마시고 공백 키 네 번, 또는 Tab 키를 한 번 눌러서 간격을 띄운 다음에 명령을 입력하세요. 파이썬에서는 여러 줄로 이루어진 명령을 입력할 때 둘째 줄부터는 반드시 들여쓰기를 해줘야하니까요.

...     print(num)
...     num = num + 1
...

그렇게 셋째, 넷째 줄까지 치고 ...이 나오면 Enter를 한 번 더 눌러주세요. 그러면 더 이상 입력할 것이 없다는 것으로 알고 while 문이 끝나게 됩니다. 제대로 따라하셨다면 순식간에 1부터 100까지 화면에 나타날 겁니다.

그리하여 석봉은 100까지 숫자를 쓰고 그리운 어머니 품에서 편안히 잠들 수 있게 되었다는 말씀.