3. while 반복문 Last updated: 2023-10-17 10:29:36

while문은 for 문과 함께 대표적으로 사용되는 반복문이다. While 문은 for문과 다르게 반복해야 하는 횟수나 대상이 정해진 것이 아니라 조건이 해당하는한 계속해서 반복 실행되는 특징을 갖는다. while 문의 사용 방법에 대해 알아보자.

3.1. while 문 형식

while 문은 for 문과 함께 대표적인 반복문이다. 반복문이란 조건에 만족하는 경우 구현한 내용을 반복해서 실행하게 하는 구문이다. 다음은 while 구문의 형식이다.

형식

while condition:
    # [A] do something

    if condition1:
        break
    if condition2:
        continue
else:
    # [B] do something

파라미터

• condition : while의 조건문, 조건이 True인 동안 계속해서 while문이 반복
• condition1 : (선택) break문을 실행하기 위한 if 문의 조건절
• condition2 : (선택) continue문을 실행하기 위한 if 문의 조건절

while문은 condition이 True인 동안 계속해서 while 문 내의 코드를 반복해서 실행된다. while 문을 종료하는 조건은 while문의 condition 조건이 False가 되거나, while문 내에서 break문을 실행하는 것이다. while 문의 반복이 끝나고 else 문이 있다면 마지막에 한번 [B] 코드 블럭이 실행된다.

위의 구문 형식에 대해 설명하면 다음과 같다.

  1. while 구문 뒤에는 조건을 입력하고 조건문의 끝에 콜론(:)을 입력한다.

  2. while 문 안에 구현하는 코드는 들여쓰기(보통 공백 4개)를 해야한다.

  3. 특정 조건에서 while 문을 종료하려면 break를 사용한다.

  4. break 문이 실행되면 else 문은 실행되지 않는다.

  5. 특정 조건에서 실행하던 반복 구문을 종료하고 다음 반복으로 넘어가려면 continue를 사용한다.

  6. while 문의 조건이 False에 해당할 때 실행할 코드가 있다면 else 문을 사용한다.

for 문은 실행을 위해 반복자를 사용했다. 해당 반복자의 갯수 만큼 for 문 내에 구현한 코드를 반복 실행하는 것이다. 하지만 while 문은 반복 횟수를 지정하는 것이 아니라 if 문과 같이 조건문을 입력한다. 횟수는 알 수 없지만 조건이 True 인 경우 반복문이 실행되고 조건이 False가 되면 while 문을 종료된다.

여기서 주의할 점이 있다. for 문은 반복 횟수를 알지만 while 문은 반복 횟수를 알지 못하기 때문에 자칫 조건이 False로 변경되지 않는 경우 무한루프를 돌 수 있다. 다시 말해 while 문 내부에서 조건을 변경해 주어야 언젠가 종료가 된다는 것이다.



3.2 while 문의 사용 예


3.2.1 숫자를 이용한 while 문

다음은 숫자를 이용해 while 문을 실행한 예제이다.

[예제 4- 27] 숫자 조건을 이용한 while 문 사용하기

a = 0

# [1] while 문 시작
while a < 10:
    print(a)

    # [2] a 값 1씩 증가
    a += 1

[결과]

0
1
2
3
4
5
6
7
8
9

위 예제에서 a는 0부터 시작한다. [1]에서 처음 while 문을 실행하면 0 < 10 이므로 True이다. [2]에서 a에 1을 더해 a=1이 되었다. 다시 [1]에서 조건을 검사해보니 1 < 10으로 True다. 이런 식으로 계속 반복하여 a=10이 되면 10 < 10 조건이 False가 되어 while 문 안의 내용을 실행하지 않고 종료되었다.



3.2.2 리스트를 이용한 while 문

다음은 리스트를 이용한 while 문 예시이다. 리스트 변수에서 pop( ) 메서드를 실행하면 항목이 한 개씩 반환 되고, 반환된 항목은 리스트 변수에서 제거된다. 이렇게 리스트의 항목들을 한 개씩 꺼내 없어질 때 까지 while 문을 반복할 수 있다. 다음은 리스트 전체 항목에 대해 while 문을 실행하는 예제이다.

[예제 4- 28] 전체 리스트에 대해 while 문 반복하기

fruits = ['apple', 'banana', 'orange']

# [1] while 문 시작
while fruits:

    # [2] 리스트에서 항목을 하나씩 꺼낸다
    fruit = fruits.pop()
    print(fruit)

[결과]

orange
banana
apple

위 예제의 [1]에서 while 문이 실행되고 조건으로 리스트 변수 fruits이 사용되었다. 리스트 변수가 조건으로 사용된 경우 항목이 존재하면 True, 비어 있으면 False이다. [2]에서 항목 한 개를 꺼내 fruit 변수에 저장하고 꺼낸 항목은 fruits의 리스트에서 제거된다. 이렇게 반복하면 항목이 한 개씩 줄어들고 모든 항목이 꺼내져 리스트가 비게 되면 while 문이 종료된다.



3.2.3 while 문에 break 사용

while 문을 실행하다가 break 문을 만나면 while 문이 종료된다. 보통 조건을 검사하기 위해 if 문과 함께 break를 사용한다. 다음은 숫자를 이용해 값이 5보다 커지면 while 문을 종료하는 코드이다.

[예제 4- 29] break로 while문 종료하기

a = 0
# [1] while 문 시작
while a < 10:
    print(a)

    # [2] a값 1씩 증가
    a += 1
    
		# [3] a가 5보다 크면 while문 종료
    if a > 5:
        break

[결과]

0
1
2
3
4
5

위 예제에서 a의 값을 1씩 증가 시키며 while 문을 반복 실행하다가 [3]에서 a의 값이 5보다 커지면 break 문을 이용해 while 문 실행을 종료 시킨다.



3.2.4 while문에 continue 사용

while 문에서 continue는 for 문과 동일하게 동작한다. while 문 안의 내용이 실행될 때 continue를 만나면 남은 코드를 실행하지 않고 다음 반복을 위해 while 조건문으로 이동한다. 다음은 숫자를 0부터 9까지 반복하며 짝수인 경우 출력하고 홀수인 경우 다음으로 넘어가도록 구현한 예제이다.

[예제 4- 30] while 문으로 짝수 출력하기

a = 0
# [1] while 문 시작
while a < 10:
    
    # [2] a 값을 1씩 증가
    a += 1
    
    # [3] 값이 홀수인 경우 다음 반복조건으로 넘어간다.
    if a % 2 == 1:
        continue
        
    # [4] continue 조건 이후의 코드
    print(f"{a} is 짝수")

[결과]

2 is 짝수
4 is 짝수
6 is 짝수
8 is 짝수
10 is 짝수

위 예에서 while 반복문이 시작하면 a는 0부터 1씩 증가되어 9까지 반복 실행된다. [3]에서 조건을 만나면 값이 홀수인지 검사하여 홀수라면 continue를 실행한다. 그러면 [4]를 실행하지 않고 바로 [1]로 이동하여 다음 반복 조건을 검사한다.


Hint! 무한루프를 주의한다.

다음의 코드는 쉽게 발생할 수 있는 무한루프 코드이다. a의 값이 1씩 증가 되기를 기대하지만 [1]에서 조건을 만나 continue를 실행하면 동일한 a값을 가지고 다시 while 조건문을 검사한다. a가 동일한 값이니 이후에는 계속 [1]의 조건에 걸려 무한 반복하는 코드이다. 이렇게 continue 문을 작성할 때는 혹여 조건에 해당하지 않아 루한루프를 도는 코드가 아닌지 미리 꼼꼼히 확인하는 주의가 필요하다.

a = 0
while a < 10:
	# [1] continue 조건
	if (a % 2) == 1:
		continue
	# [2] a값 1씩 증가
	a += 1



3.2.5 while ~ else 문

while 문은 for 문과 마찬가지로 else 문을 사용해 조건에 해당하지 않는 경우 예외 처리를 할 수 있다. 다음과 같이 break문이 존재 하더라도 while 문의 조건에 따라 정상 종료가 된다면 else 문이 실행된다.

[예제 4- 31] while ~ else 문 사용하기

a = 0
# [1] while 문 시작
while a < 5:
    print(a)
    
    # [2] a 값을 1씩 증가
    a += 1
    
    # [3] a 값이 10보다 크면 중단
    if a > 10:
        break
else:
    print("else")

[결과]

0
1
2
3
4
else

위 예제에서 while 문의 조건은 a가 5보다 작을때다. a값은 0에서 시작하여 1씩 증가하다가 5보다 커서 while 문을 종료하고 else 문을 실행한다. 하지만 [3]의 조건 a > 10에는 해당하지 않아 break가 실행되지 않아 else 문이 실행되었다.

단, for 문에서와 마찬가지로 break 명령을 사용하면 while 문을 모두 중단시키므로 else 문도 실행되지 않는다.


[예제 4- 32] while ~ else 문의 break 사용하기

a = 0
while a < 10:
    print(a)
    a += 1
    
    if a > 5:
        break
else:
    print("else")

[결과]

0
1
2
3
4
5

위 예제에서 break 문을 통해 while 문이 종료되었으므로 else 문이 실행되지 않았다.