커피 자판기를 생각해 보자. 커피가 자판기 안에 충분하게 있을 때는 항상 “돈을 받으면 커피를 줘라” 라는 조건문을 가진 while문이 수행된다.
자판기가 제 역할을 하려면 커피의 양을 따로이 검사를 해서 커피가 다 떨어지면 while문을 멈추게 하고 “판매중지”란 문구를 자판기에 보여야 할 것이다.
이렇게 while문을 강제로 멈추게 하는 것을 가능하게 해 주는 것이 바로 break이다.
다음의 예는 위의 가정을 파이썬으로 표현해 본 것이다.
예) break의 사용
>>> coffee = 10
>>> money = 300
>>> while money:
... print("돈을 받았으니 커피를 줍니다.")
... coffee = coffee -1
... print("남은 커피의 양은 %d 입니다." % coffee)
... if not coffee:
... print("커피가 다 떨어졌습니다. 판매를 중지합니다.")
... break
...
money가 300으로 고정되어 있으니까 while money:에서 조건문인 money는 0이 아니기 때문에 항상 참이다.
따라서 무한 루프를 돌게 된다.
그리고 while문의 내용을 한번 수행할 때 마다 coffee = coffee - 1에 의해서 coffee의 개수가 한 개씩 줄어들게 된다.
만약 coffee가 0이 되면 if not coffee: 라는 문장에서 not coffee가 참이 되므로 if문 다음의 문장들이 수행이 되고 break가 호출되어 while문을 빠져 나가게 된다.
하지만 실제 자판기는 위처럼 작동하지는 않을 것이다.
다음은 자판기의 실제 과정과 비슷하게 만들어 본 예이다.
이해가 안 되더라도 걱정하지 말자.
아래의 예는 조금 복잡하니까 대화형 인터프리터를 이용하지 말고 에디터를 이용해서 작성해 보자.
# -*- coding: utf-8 -*-
# coffee.py
coffee = 10
while True:
money = int(input("돈을 넣어 주세요: "))
if money == 300:
print("커피를 줍니다.")
coffee = coffee -1
elif money > 300:
print("거스름돈 %d를 주고 커피를 줍니다." % (money -300))
coffee = coffee -1
else:
print("돈을 다시 돌려주고 커피를 주지 않습니다.")
print("남은 커피의 양은 %d개 입니다." % coffee)
if not coffee:
print("커피가 다 떨어졌습니다. 판매를 중지 합니다.")
break
위의 프로그램 소스를 따로 설명하지는 않겠다.
위의 것을 이해할 수 있다면 지금껏 알아온 if문이나 while문을 마스터 했다고 보면 된다.
다만 money = int(input(“돈을 넣어 주세요: ”))라는 문장은 사용자로부터 입력을 받는 부분이고 입력 받은 숫자를 money라는 변수에 대입하는 것이라고만 알아두자.
※ 파이썬 2.7 버전을 사용한다면 위 소스코드에서 input("돈을 넣어 주세요: ") 대신 raw_input("돈을 넣어 주세요: ")으로 사용해야 하며 소스코드 가장 첫줄에 다음과 같은 문자열을 반드시 넣어주어야만 한다. (참고: 파이썬 2.7 vs 파이썬 3) # -*- coding: utf-8 -*-
만약 위의 프로그램 소스를 에디터로 작성해서 실행시키는 법을 모른다면 부록의 "에디터 사용법"을 참고하도록 하자.
조건문으로 돌아가기(continue)
while문 안의 문장을 수행할 때 어떤 조건을 검사해서 조건에 맞지 않는 경우 while문을 빠져나가는 것이 아니라 다시 while문의 맨 처음(조건문)으로 돌아가게 하고 싶을 경우가 생기게 된다.
만약 1부터 10까지의 수중에서 홀수만을 출력하는 것을 while문을 이용해서 작성한다고 생각해 보자. 어떤 방법이 좋을까?
예) continue의 사용
>>> a = 0
>>> while a < 10:
... a = a+1
... if a % 2 == 0: continue
... print(a)
...
1
3
5
7
9
위의 예는 1부터 10까지의 수 중 홀수만을 출력하는 예이다.
a가 10보다 작은 동안 a는 1만큼씩 계속 증가한다. if a % 2 == 0 (2로 나누었을 때 나머지가 0인 경우)이 참이 되는 경우는 a가 짝수일 때이다.
즉, a가 짝수이면 continue 문장을 수행한다. 이 continue문은 while문의 맨 처음(조건문: a<10)으로 돌아가게 하는 명령어이다.