본문 바로가기

Programing/Python

[Python 입문] 8. 파이썬 제어문 - while

목차

  • while문 기본 구조
  • while문 직접 만들어보기
  • while문 강제로 빠져나가기
  • 조건에 맞지 않는 경우 맨 처음으로 돌아가기

while문

1. while문 기본구조

 반복문이라고도 불리는 while문은 문장을 반복해서 수행할 때 사용한다.

 while문은 조건문이 참인 동안 while문 아래에 속하는 문장을 반복해서 수행하라는 뜻이며 기본구조는 아래의 그림과 같다.

 이 기본구조도를 참고해서 "열 번 찍어 안 넘어가는 나무 없다."는 속담을 파이썬에서 만들면 아래의 소스코드와 같다.

>>> treeHit = 0   <---- 나무를 찍은 횟수
>>> while treeHit < 10:   <---- 나무를 찍은 횟수가 10보다 작을 때 까지 반복
...     treeHit = treeHit + 1   <---- 나무를 찍은 횟수 1씩 증가
...     print("I hit the tree {0}times." .format(treeHit))
...     if treeHit == 10:   <---- 나무를 10번 찍으면
...             print("The tree is falling over.")
... 
I hit the tree 1times.
I hit the tree 2times.
I hit the tree 3times.
I hit the tree 4times.
I hit the tree 5times.
I hit the tree 6times.
I hit the tree 7times.
I hit the tree 8times.
I hit the tree 9times.
I hit the tree 10times.
The tree is falling over.

 위에서 사용한 while문의 조건문은 treeHit < 10이다. treeHit이 10보다 작을 때까지 while문 안의 문장을 계속 수행하라는 뜻이다. treeHit = treeHit + 1을 통해 treeHit의 값이 1씩 증가하며 나무를 찍은 횟수를 출력한다. 그리고 if문을 사용해 treeHit이 10 되면 나무가 넘어갔다는 문장을 출력한다. 그 후 treeHit < 10이라는 조건문이 거짓이 되는 순간 while문을 빠져나간다. 이 부분을 정리한 표는 아래와 같다.

treeHit 조건문 조건 판단 수행하는 문장 while문
0 0 < 10 I hit the tree 1times. 반복
1 1  < 10 I hit the tree 2times. 반복
2 2 < 10 I hit the tree 3times. 반복
3 3 < 10 I hit the tree 4times. 반복
4 4 < 10 I hit the tree 5times. 반복
5 5 < 10 I hit the tree 6times. 반복
6 6 < 10 I hit the tree 7times. 반복
7 7 < 10 I hit the tree 8times. 반복
8 8 < 10 I hit the tree 9times. 반복
9 9 < 10

I hit the tree 10times.

The tree is falling over.

반복
10 10 < 10 거짓   종료

 이렇게 긴 과정을 위의 소스코드 다섯 줄로 만들었다.

 

 

2. while문 직접 만들어보기

# 여러 가지 선택지 중 하나를 선택할 수 있는 선택지 만들기
>>> prompt = """
... 1. Add
... 2. Del
... 3. List
... 4. Quit
... 
... Enter number: """

# 변수 number에 0을 먼저 대입 후 while문 사용
>>> number = 0   <---- 번호를 입력받을 변수 설정
>>> while number != 4:   <---- 입력받은 번호가 4가 될 때 까지 반복
...     print(prompt)
...     number = int(input())
... 

1. Add
2. Del
3. List
4. Quit

Enter number: 
1   <---- 4가 아닌 번호를 입력했기 때문에 계속해서 prompt 출력

1. Add
2. Del
3. List
4. Quit

Enter number: 
4   <---- 4을 입력했기 때문에 while문 빠져나가기
>>> 

 

 

3. whlie문 강제로 빠져나가기

 while문은 조건문이 참인 동안 계속 내용을 반복적으로 수행한다. 예를 들어 커피 자판기에서 커피를 판매하는 중 커피가 떨어지면 '판매 중지'라는 문구가 나오면서 커피를 뽑을 수 없다. 이렇게 강제로 판매를 멈추게 하는 것이 break문이다. 이 break문을 파이썬 프로그램에 적용시켜 보자. (지금부터는 소스코드의 길이가 길어지기 때문에 대화형 인터프리터가 아닌 에디터를 사용한다.)

coffee = 10   <---- 자판기에 커피가 10개 있다.
while True:
    money = int(input("Please put the money: "))   <---- 사용자로부터 입력을 받는 부분 (추후 설명)
    if money == 300:
        print("I'll give you some coffee.")
        coffee = coffee - 1   <---- while문 한 번 진행할 때 마다 커피의 갯수가 하나씩 줄어든다.
    elif money > 300:
        print("I'll give you some coffee. and The change is {0} won." .format(money - 300))
        coffee = coffee - 1   <---- while문 한 번 진행할 때 마다 커피의 갯수가 하나씩 줄어든다.
    else:
        print("You need more money.")
        print("There are {0} coffees left." .format(coffee))
    if not coffee:
        print("There is no more coffee. Sold Out!")   <---- 남은 커피가 없기 때문에 판매가 중지된다.
        break   <---- while문 강제로 빠져나가기

 

 

4. 조건에 맞지 않는 경우 맨 처음으로 돌아가기

 앞서 공부했던 break문을 통한 강제로 빠져나가기가 아니라 조건에 맞지 않으면  while문의 맨 처음 조건문으로 돌아가게 만들고 싶을 때 continue문을 사용할 수 있다.

 1부터 10까지의 숫자 중 홀수만 출력하는 것을 while문과 continue문을 사용해서 작성해보자.

a = 0
while a < 10:
    a = a + 1
    if a % 2 == 0: continue   <---- a를 2로 나누기해서 나머지가 0이면 맨 처음으로
    print(a)

1
3
5
7
9

 a를 2로 나눠서 0이 되면 짝수라는 뜻이기 때문에 맨 처음으로 돌아갈 수 있도록 continue문을 넣어준다.

 

 

내용 출처: 책 '점프 투 파이썬'의 내용