[파이썬 일기] #5. 프로그램 흐름 제어하기
Python 2009/05/31 17:35 |프로그램은 컴퓨터가 할 일의 목록이다. 프로그래머가 컴퓨터에게 할 일의 목록을 내주면, 컴퓨터는 프로그램에 기록되어 있는 일 목록을 보고 그 대로 수행한다. 프로그래밍에서 "흐름(Flow)"라고 하면 컴퓨터에 내려지는 명령의 순서를 가리키는 말이다. 다음과 같이 프로그램을 작성하면 컴퓨터는 1, 2, 3번의 작업을 순서대로 처리할 것이다.
- a 에 사용자로부터 입력 받은 수를 저장하라.
- b에 3/a의 결과를 저장하라.
- a와 b를 출력하라.
이 프로그램은 간단하긴 하지만 문제가 한가지 있다. 만일 a가 가지면 안 되는 수, 예를 들어 0을 사용자로부터 입력 받게 되면 이 프로그램은 오류를 일으키게 된다. 이것을 방지할 수 있는 방법이 있어야 하지 않겠는가? 다음과 같이 말이다.
- a에 사용자로부터 입력 받은 수를 저장하라.
- a가 0 이라면 프로그램을 종료하고, 그렇지 않으면 다음 명령을 수행하라.
- b 에 3/a의 결과를 저장하라.
- a와 b를 출력하라.
2번의 "a가 0이라면 ~하고, 그렇지 않다면 ~하라"를 주목하자. 프로그램이 직선으로 흐르다가 이 문장을 통해 방향을 이리 저리 틀게 되었다. 오늘은 이와 같이 프로그램 흐름의 방향을 틀거나 반복할 수 있도록 하는 파이썬의 "흐름 제어(Control Flow)"를 살펴볼 계획이다.
흐름 제어에는 크게 두 가지가 있다. 하나는 프로그램의 흐름을 좌/우로 가르는 분기(branch)문, 또 다른 하나는 프로그램의 일부를 반복 동작하게 하는 반복(loop)문이다. 파이썬이 제공하는 분기문에는 if 문이 있고 반복문에는 for와 while문이 있다. 다음에서 먼저 if 문을 알아보자.
#5.1. if 문
초등학교를 졸업했다면 if가 무슨 뜻인지 알고 있을 것이다 if는 '~라면'이라는 뜻이다. 신라면, 너구리 이런 라면이 아니고 어떤 상황을 가정할 때 사용하는 라면 말이다. 예를 들어 '내가 산 로또가 1등이라면' 같은 것 말이다. 파이썬 코드에서도 if 문을 이용해서 어떤 상황을 가정하고 그 상황에 필요한 명령을 사용할 수 있다.
if 조건 문장 :
명령1
명령2
….
else :
명령2
명령3
…
if문의 조건은 콜론( : )으로 끝나며, 그 밑 줄부터는 조건이 참(True)인 경우 실행할 명령들이 위치한다. 만약 if에서 명시한 조건이 거짓(False)인 경우에는 else : 이후의 명령들이 실행된다. 여기에서 잘 봐야 할 것이 있다. 바로 if 문에 명시한 조건 하에서 실행되어야 하는 명령들(그리고 그 조건이 맞지 않아 else : 밑에서 실행되어야 하는 명령들)은 모두 들여쓰기로 쓰여있어야 한다는 것이다. 예를 한번 보자.
>>> a = int( input( "수를 입력하세요 : " ) )
수를 입력하세요 : 78
>>> if a != 0 :
print( "a는 크다!" )
print( "a는 크다!" )
print( "a는 크다!" )
else :
print( "a는 0이다.")
print( "a는 0이다.")
a는 크다!
a는 크다!
a는 크다!
위 코드에서 print("a는 크다!")가 쓰여 있는 세 줄이 바로 a가 0이 아닌 경우 실행되어야 하는 부분이다. 이 세 줄처럼 하나의 묶음으로 처리되는 코드를 가리켜 "블록(Block)"이라 한다. 파이썬은 코드가 연속한 줄에 위치한다고 해서 같은 블록으로 인지하지는 않는다. 같은 깊이로 들여쓰기가 되어 있어야 블록으로 인지한다. 그래서 위 예제에서 if 블록이라 하면 세 줄의 print( "a는 크다!" )를 가리키는 것이고, else 블록이라 하면 print("a는 0이다.")의 두 줄을 가리키는 말이 되는 것이다.
조금 전에 살펴 봤던 예제처럼 조건이 하나만 있을 수도 있지만, 조건이 여러 개 필요한 경우도 다반사다. 이런 경우를 위해 if와 함께 쓸 수 있는 elif 문이 있다. elif는 else if 의 줄임말로, if문과 똑같이 조건을 명시하면 된다. 사용 예는 다음과 같다.
>>> a = int ( input( "숫자를 입력하세요 : ") )
숫자를 입력하세요 : 1
>>> if a == 0 :
print("a는 0")
elif a == 1 :
print("a는 1")
elif a == 2 :
print("a는 2")
else :
print("a는 0도, 1도, 2도 아님.")
a는 1
파이썬의 분기문은 if 하나 뿐이다. C나 Java, C#에서 제공하는 것처럼 switch 문 등은 제공하지 않는다. 아쉽긴 하지만 이건 어디까지나 파이썬을 만든 귀도형님의 취향이니 존중을 해드려야겠다. 내일은 반복문에 해당하는 for문과 while 문을 공부해야겠다.
'Python' 카테고리의 다른 글
| [파이썬 일기] #5.4. continue와 break (0) | 2009/06/09 |
|---|---|
| [파이썬 일기] #5.2. for문, #5.3 while 문 (0) | 2009/06/02 |
| [파이썬 일기] #5. 프로그램 흐름 제어하기 (0) | 2009/05/31 |
| 파이썬 공부 중간 점검. (0) | 2009/05/22 |
| [파이썬 일기] #4.2.4.3 불변 바이트 배열(bytes)와 가변 바이트 배열(byte array) (0) | 2009/05/20 |
| [파이썬 일기] #4.2.3.2 튜플(Tuple)과 리스트(List) (0) | 2009/05/07 |

댓글을 달아 주세요