17.1 while 반복문 사용하기

Unit 17. while 반복문으로 Hello, world! 100번 출력하기

지금까지 for 반복문을 사용하여 'Hello, world!'를 100번 출력해보았습니다. 이번에는 while 반복문에 대해 알아보겠습니다.

while 반복문은 조건식으로만 동작하며 반복할 코드 안에 조건식에 영향을 주는 변화식이 들어갑니다.

i = 0                     # 초기식
while i < 100:            # while 조건식
     print('Hello, world!')    # 반복할 코드
     i += 1                    # 변화식

다음은 while 반복문의 실행 과정입니다. 먼저 초기식부터 시작하여 조건식을 판별합니다. 이때 조건식이 참(True)이면 반복할 코드와 변화식을 함께 수행합니다. 그리고 다시 조건식을 판별하여 참(True)이면 코드를 계속 반복하고, 거짓(False)이면 반복문을 끝낸 뒤 다음 코드를 실행합니다.

그림 17-1 while 반복문의 동작 과정

여기서는 조건식 → 반복할 코드 및 변화식 → 조건식으로 순환하는 부분이 루프(loop)입니다.

17.1 while 반복문 사용하기

다음과 같이 while 반복문은 조건식을 지정하고 끝에 :(콜론)을 붙인 뒤 다음 줄에 반복할 코드와 변화식을 넣습니다. 초기식은 특별한 것이 없고 보통 변수에 값을 저장하는 코드입니다.

초기식
while 조건식:
     반복할 코드
     변화식

while 다음 줄에 오는 코드는 반드시 들여쓰기를 해줍니다.

이제 while 반복문으로 'Hello, world!'를 100번 출력해보겠습니다.

>>> i = 0
>>> while i < 100:
...      print('Hello, world!')
...      i += 1
... 
Hello, world!
... (생략)
Hello, world!
Hello, world!
Hello, world!
에러

SyntaxError: invalid syntax: while 반복문의 형식을 지키지 않았을 때 발생하는 구문 에러입니다. while 끝에 :(콜론)을 빠뜨리지 않았는지 확인해주세요.

SyntaxError: expected an indented block: while 다음 줄에 오는 반복할 코드의 들여쓰기가 맞지 않아서 발생하는 구문 에러입니다. 반복할 코드와 변화식에서 들여쓰기 4칸을 했는지 확인해주세요.

먼저 while 반복문에 사용할 변수 i에 0을 할당합니다. 그리고 while에는 조건식만 지정하면 됩니다. 특히 while 반복문은 반복할 코드 안에 변화식을 지정해야 합니다. 만약 조건식만 지정하고 변화식을 생략하면 반복이 끝나지 않고 계속 실행(무한 루프)되므로 주의해야 합니다.

그림 17-2 while 반복문의 기본 형태

i < 100과 같이 조건식을 지정하여 i가 100 미만일 때만 반복하고, i가 100이 되면 반복을 끝내도록 만들었습니다. 그리고 반복할 코드의 변화식에는 i += 1i를 1씩 증가시켰으므로 i가 0부터 99까지 증가하면서 100번 반복하게 됩니다. 물론 변화식 i += 1을 풀어서 i = i + 1로 만들어도 동작은 같습니다.

17.1.1  초깃값을 1부터 시작하기

이번에는 i에 0이 아닌 1을 할당하여 'Hello, world!'를 100번 출력해보겠습니다.

>>> i = 1
>>> while i <= 100:
...     print('Hello, world!', i)
...     i += 1
...
Hello, world! 1
Hello, world! 2
Hello, world! 3
...  (생략)
Hello, world! 99
Hello, world! 100

i에 1을 넣었으므로 while의 조건식은 i <= 100과 같이 지정합니다. 따라서 i가 1부터 100까지 증가하므로 100번 반복하게 됩니다. 만약 i가 101이 되면 i <= 100은 거짓(False)이므로 반복문을 끝냅니다.

17.1.2  초깃값을 감소시키기

지금까지 초깃값을 증가시키면서 루프를 실행했습니다. 반대로 초깃값을 크게 주고, 변수를 감소시키면서 반복할 수도 있습니다. 다음은 100부터 1까지 100번 반복합니다.

>>> i = 100
>>> while i > 0:
...     print('Hello, world!', i)
...     i -= 1
...
Hello, world! 100
Hello, world! 99
Hello, world! 98
... (생략)
Hello, world! 2
Hello, world! 1

100부터 1까지 반복해야 하므로 먼저 i에 100을 할당합니다. 그다음에 while의 조건식은 i > 0과 같이 지정하여 1까지만 반복하도록 만듭니다. 또한, 변화식을 i -= 1로 지정하여 변수의 값을 감소시킵니다. 이렇게 하면 i가 100부터 1까지 감소하면서 반복합니다. 만약 i가 0이되면 i > 0은 거짓(False)이므로 반복문을 끝냅니다.

17.1.3  입력한 횟수대로 반복하기

이번에는 입력한 횟수대로 반복을 해보겠습니다. 다음 내용을 IDLE의 소스 코드 편집 창에 입력하세요.

while_input_increment.py

count = int(input('반복할 횟수를 입력하세요: '))
 
i = 0
while i < count:     # i가 count보다 작을 때 반복
    print('Hello, world!', i)
    i += 1

소스 코드를 실행하면 '반복할 횟수를 입력하세요: '가 출력됩니다. 여기서 3을 입력하고 엔터 키를 누르세요.

실행 결과

반복할 횟수를 입력하세요: 3 (입력)
Hello, world! 0
Hello, world! 1
Hello, world! 2

input으로 입력 값을 받아서 count 변수에 저장했습니다. 그리고 i에는 0을 할당하고, while 반복문의 조건식에서 i < count와 같이 지정하여 count에 들어있는 값만큼 반복하도록 만들었습니다. 여기서는 3를 입력했으므로 'Hello, world!'는 3번만 출력됩니다.

이번에는 초깃값을 받은 뒤 초깃값만큼 출력해보겠습니다.

while_input_decrement.py

count = int(input('반복할 횟수를 입력하세요: '))
 
while count > 0:     # count가 0보다 클 때 반복
    print('Hello, world!', count)
    count -= 1       # count를 1씩 감소시킴

실행 결과

반복할 횟수를 입력하세요: 3 (입력)
Hello, world! 3
Hello, world! 2
Hello, world! 1

input으로 입력 값을 받아서 count 변수에 저장했습니다. 그리고 조건식에서 count > 0와 같이 지정하여 count에 들어있는 값만큼 반복하도록 만들었습니다. 여기서는 변수 i 대신 count를 바로 사용하므로 변화식을 count -= 1로 지정하여 반복할 때마다 count를 감소시키고 count가 0이 되면 반복문을 끝냅니다.