파이썬 기초 강좌 #14 while 반복문 (while loop)

7 분 소요

파이썬은 while loop 과 for loop, 2개의 반복문을 제공하는데, 오늘은 while 반복문에 대해서 공부해보도록 하겠습니다.

반복문은 어떤 코드를 여러번 반복하여 실행하고자 할 때 사용되는데, while 반복문의 기본 형태는 테스트 블록과 실행 블록으로 나뉘어져 있고, 테스트 블록이 먼저 실행되어 결과값이 참이면 실행 블록안의 코드를 실행하고, 테스트 블록의 결과가 거짓이 될때까지 계속 반복하여 실행하게 됩니다.

아래의 간단한 while 문의 코드를 실행하면 어떤 결과가 나올까요?

# while 반복문은 테스트 블록의 결과가 거짓이 될 때 까지 반복하여 실행됩니다.
 
i = 1
 
while True:  # 테스트 블록
    print(i)  # 실행 블록

💡 오늘의 팁

무한 루핑을 반복하는 프로그램은 Ctr + C 를 눌러 프로그램을 종료셔야 합니다.

테스트 블록의 결과가 항상 True로 하드코딩 되어 있기 때문에 루프를 빠져 나오지 못하고 무한 루프를 돌면서 1을 출력하게 됩니다.

반대로 다음과 같은 코드를 실행하면 첫 테스트의 결과가 False 이기 때문에 실행 블록은 한 번도 실행되지 않게 됩니다.

i = 1
 
while False:
    print(i)

While 문을 사용해서 1부터 10까지 출력하고자 하면 다음과 같은 코드를 작성하시면 됩니다.

i = 1
 
while i <= 10:
    print(i)
    i += 1
1
2
3
4
5
6
7
8
9
10

이번에는 리스트 아이템을 하나씩 출력해 보겠습니다.

my_list = ['one', 'two', 'three', 'four', 'five']
 
index = 0
last_index = 4
 
while index <= last_index:
    print(my_list[index])
    index += 1
one
two
three
four
five

일반적으로 프로그램을 만들면 my_list 와 같은 데이터는 위의 코드와 같이 하드코딩된 데이터를 사용하지 않고, 데이터베이스나 외부 데이터를 사용하는 경우가 많습니다. 따라서 코딩을 하는 시점에 아이템의 개수가 몇개인지 알 수 없는 경우가 많습니다. 그런 이유로 위의 코드에는 한가지 문제점이 있는데요, 리스트 아이템의 숫자가 줄거나 늘면 하드코딩된 last_index의 값을 수정해 주어야한다는 점입니다. 그래서 아래의 코드와 같이 테스트 조건에 len 함수를 사용하여 리스트의 개수를 확인한 값을 적용하는 것이 일반적인 방법입니다.

my_list = ['one', 'two', 'three', 'four', 'five']
 
index = 0
last_index = len(my_list) - 1
 
while index <= last_index:
    print(my_list[index])
    index += 1

어떤 경우에는 조건이 항상 True인 조건문을 사용하여 의도적으로 무한 루프를 사용하는 경우도 있습니다. 프로그램이 실행되는 동안에 무한 루프 실행하여 1초에 한 번씩 시간을 출력하는 코드를 만들어 보겠습니다.

from datetime import datetime
import time
 
while True:
    print(datetime.now())
    time.sleep(1)
2023-03-18 15:12:12.176344
2023-03-18 15:12:13.188636
2023-03-18 15:12:14.201926
2023-03-18 15:12:15.216212
2023-03-18 15:12:16.216538
2023-03-18 15:12:17.228829
2023-03-18 15:12:18.240128
2023-03-18 15:12:19.254411
2023-03-18 15:12:20.260723
...

이번에는 무한 루프를 사용하여 유저에게 패스워드를 입력 받는 프로그램을 만들어 보겠습니다. 맞는 패스워드를 입력하지 않는한 while 문 다음의 코드는 실행되지 않습니다. 맞는 패스워드가 입력되면 break 키워드가 while 문을 종료 시키고 while 문 다음의 코드가 실행됩니다.

password = '1234'
balance = 10000
 
while True:
    user_input = input('[입력] 패스워드를 입력하여 주세요: ')
 
    if user_input != password:
        print('패스워드가 틀렸습니다.\\n')
    else:
        print('로그인에 성공하였습니다.')
        break
 
print('고객님의 은행잔고는 {} 입니다.'.format(balance))
[입력] 패스워드를 입력하여 주세요: 123
[입력] 패스워드를 입력하여 주세요: 111
패스워드가 틀렸습니다.
 
[입력] 패스워드를 입력하여 주세요: 123
패스워드가 틀렸습니다.
 
[입력] 패스워드를 입력하여 주세요: 1234
로그인에 성공하였습니다.
고객님의 은행잔고는 10000 입니다.

While 반복문의 공부는 여기서 마치시고, 다음 강좌에서는 for 문 (for loop) 에 대해서 공부를 하도록 하겠습니다.