[Python] 기초4. 반복문(While)

문장을 반복해서 수행해야 할 경우 while 문을 사용합니다.

그래서 while 문을 ‘반복문’이라고도 부릅니다.

 

while 문의 기본 구조

다음은 while 문의 기본 구조입니다.

while 조건문:
    수행할_문장1
    수행할_문장2
    수행할_문장3
    ...

while 문은 조건문이 참(True, 1)인 동안

while 문에 속한 문장들이 반복 수행 됩니다.

 

커피 자판기를 예를 들어,

자판기 안에 커피가 충분히 있을 때 동전을 넣으면 커피가 나옵니다.

그런데 자판기가 제대로 작동하려면

커피가 얼마나 남았는지 항상 검사해야 하죠.

만약 커피가 떨어졌다면 판매를 중단하고

‘판매 중지’ 문구를 사용자에게 보여 주어야 합니다.

이렇게 판매를 강제로 멈추게 하는 것으로 break 문을 사용합니다.

위 예의 커피 자판기를 파이썬 프로그램으로 표현해보면,

>>> coffee = 10
>>> money = 300
>>> while money:
...     print("돈을 받았으니 커피를 줍니다.")
...     coffee = coffee -1
...     print("남은 커피의 양은 %d개입니다." % coffee)
...     if coffee == 0:
...         print("커피가 다 떨어졌습니다. 판매를 중지합니다.")
...         break
...

money가 300으로 고정되어 있고

while money:에서 조건문인 money는 0이 아니기 때문에 항상 참입니다.

따라서 무한히 반복되는 무한 루프를 돌게 됩니다.

그리고 while 문의 내용을 한 번 수행할 때마다

coffee = coffee - 1에 의해 coffee의 개수가 1개씩 줄어들고,

만약 coffee가 0이 되면 

if coffee == 0: 문장에서

coffee == 0이 참이 되므로

if 문 다음 문장 "커피가 다 떨어졌습니다. 판매를 중지합니다."가 출력되고

break 문이 호출되어 while 문을 빠져나가게 됩니다.

 

다음은 자판기의 실제 작동 과정과 비슷하게 만들어 본 예입니다.

 

# 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 coffee == 0:
        print("커피가 다 떨어졌습니다. 판매를 중지 합니다.")
        break

coffee를 10으로 정의하고, money는 int형으로 입력을 받습니다.

만약 money로 입력받은 값이 300이라면,

"커피를 줍니다."를 출력한 후 coffee의 값을 -1 해주고,

300 을 넘는다면 "거스름돈 (money-300)를을 주고 커피를 줍니다"를 출력 후

coffee -1 해준 뒤 300 이하라면 else: 하위 문자들을 출력합니다.

반복하다 만약 coffee 값이 0이 된다면 판매중지 알림 후 break를 통해 정지 합니다.

coffee.py 실행모습

 

while 문의 맨 처음으로 돌아가기

while 문 안의 문장을 수행할 때

입력 조건을 검사해서 조건에 맞지 않으면

while 문을 빠져나갑니다.

그런데 프로그래밍을 하다 보면 while 문을 빠져나가지 않고,

while 문의 맨 처음(조건문)으로 다시 돌아가게

만들어야 할 경우가 생기게 되는데,

이때 사용하는 것이 바로 continue 문입니다.

 

1부터 10까지의 숫자 중에서 홀수만 출력하는 것을

while 문을 사용해서 작성해 보겠습니다.

>>> 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만큼씩 계속 증가하고,

a % 2 == 0(a를 2로 나누었을 때 나머지가 0인 경우)이

참이 되는 경우는 a가 짝수일 때이니,

a가 짝수이면 continue 문을 수행합니다.

이 continue 문은 while 문의 맨 처음인

조건문(a < 10)으로 돌아가게 하는 명령어라서

위 예에서 a가 짝수이면 print(a) 문장은 수행되지 않는 겁니다.

 

-출처 : 점프 투 파이썬