오늘은 한석봉 이야기를 해보겠습니다.
큰 뜻을 품고 어머니를 떠나 숫자공부를 하던 석봉은 어머니가 너무 그리워 집을 찾아갔지요. 돌아온 석봉을 본 어머니는 말씀하셨습니다.
"나는 떡을 썰 테니, 너는 글을 쓰거라."
불을 끈 어머니는 떡을 썰기 시작합니다. 어머니는 내일 아침에 아들에게 떡국을 끓여주려고 길다란 떡을 써셨던 것 같습니다. 그 동안에 석봉은 지금까지 연마한 실력을 총동원하여 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까지 숫자를 쓰고 그리운 어머니 품에서 편안히 잠들 수 있게 되었다는 말씀.
- 파이썬으로 1부터 100까지 출력하기 동영상 http://youtu.be/7BufHavnoe4