티스토리 뷰

반복문에는 for 뿐만 아니라 while 이란 것도 있습니다. 둘은 비슷하면서도 다른데요. for 문은 리스트와 같은 반복 대상에서 값을 하나씩 꺼내서 반복 작업을 수행하는 반면, while 문은 조건이 만족하는 동안 끝없이 반복합니다.

 

while 은 다음과 같은 형태로 작성하구요. 역시나 콜론(:) 과 들여쓰기가 필요합니다.

while 조건:
    실행 명령문1
    실행 명령문2
    실행 명령문3
    ....

 

for 문에서 예제로 들었던 카페에서 새로운 정책을 만들었다고 가정하겠습니다. 만약 직원이 손님을 5번이나 불렀는데 나타나지 않는다고 하면 그 커피는 바로 폐기처분을 하는 것인데요. while 을 사용해서 이 동작을 코드로 작성해보겠습니다. (어디까지나 설명을 위한 가정이라는 점, 잊지 마세요!)

customer = "토르" # 손님
index = 5 # 부르는 횟수, 총 5회

while index >= 1: # 부르는 횟수가 1 이상인 경우에만 반복 실행
    print("{0}, 커피가 준비 되었습니다. {1} 번 남았어요.".format(customer, index))    
    index -= 1 # 부르는 횟수 감소
    if index == 0: # 5번 모두 불렀다면
        print("커피는 폐기처분되었습니다.")

코드를 살펴보면 while 의 조건으로 입력된 index >= 1 조건이 참(True) 인 동안, 즉 조건이 만족되는 동안은 계속 반복하여 while 문 내에 정의된 명령문을 실행합니다. 그 과정에서 index -= 1 을 통해서 횟수가 감소하다가 만약 index 가 0 이 되면 폐기처분되었다는 문장을 출력하게 되고, 다시 while 의 조건인 index >= 1 은 더 이상 만족하지 않으므로, 즉 거짓(False) 이므로 while 문을 벗어나게 됩니다. (일반적으로 while 문을 "탈출"한다고 표현합니다)

 

출력결과는 이렇습니다.

토르, 커피가 준비 되었습니다. 5 번 남았어요. 
토르, 커피가 준비 되었습니다. 4 번 남았어요.
토르, 커피가 준비 되었습니다. 3 번 남았어요.
토르, 커피가 준비 되었습니다. 2 번 남았어요.
토르, 커피가 준비 되었습니다. 1 번 남았어요.
커피는 폐기처분되었습니다.

 

 

이 카페와 인접한 다른 카페에서는 아직 폐기 정책은 없다고 합니다. 즉, 손님이 나타날 때까지 계속 부르면서 기다려야 하겠지요. 바로 코드로 작성해보겠습니다. 아, 이 코드를 실행하시기 전에 Ctrl + c 를 먼저 기억해주세요.

customer = "아이언맨"
index = 1
while True:
    print("{0}, 커피가 준비 되었습니다. 호출 {1} 회".format(customer, index))
    index += 1

이번에는 조건 부분에 참을 의미하는 True 가 들어갔습니다. 그리고 코드 내에 while 문을 탈출하는 구문이 없으므로 이 while 문은 끝없이 계속 반복 수행되며, 이 때 무한루프(Infinite loop)에 빠졌다고 표현합니다.

 

출력 결과는 이런 식이며, 무한 루프에 빠진 프로그램을 강제 종료하기 위해서는 키보드로 Ctrl + c 를 누르시면 됩니다.

아이언맨, 커피가 준비 되었습니다. 호출 1 회
아이언맨, 커피가 준비 되었습니다. 호출 2 회
아이언맨, 커피가 준비 되었습니다. 호출 3 회
아이언맨, 커피가 준비 되었습니다. 호출 4 회
아이언맨, 커피가 준비 되었습니다. 호출 5 회
아이언맨, 커피가 준비 되었습니다. 호출 6 회
아이언맨, 커피가 준비 되었습니다. 호출 7 회
아이언맨, 커피가 준비 되었습니다. 호출 8 회
아이언맨, 커피가 준비 되었습니다. 호출 9 회
아이언맨, 커피가 준비 되었습니다. 호출 10 회
...
아이언맨, 커피가 준비 되었습니다. 호출 8881 회 
아이언맨, 커피가 준비 되었습니다. 호출 8882 회 
아이언맨, 커피가 준비 되었습니다. 호출 8883 회 
아이언맨, 커피가 준비 되었습니다. 호출 8884 회
...

# Ctrl + c 입력 시 강제 종료
Traceback (most recent call last):
  File "c:/WorkSpace/practice.py", line 13, in <module>
    print("{0}, 커피가 준비 되었습니다. 호출 {1} 회".format(customer, index))
KeyboardInterrupt
^C

 

또 다른 카페에서는 손님을 부른 후 input() 을 통해 사용자로부터 이름을 입력 받고 커피를 주문하신 손님과 일치하는지 확인을 하는 과정을 거친다고 가정하겠습니다. 다음과 같이 코드를 작성하고 실행해보면 "토르" 라는 이름의 손님이 나타날 때까지 계속 반복하여 실행됩니다.

customer = "토르"
person = "Unknown"

while person != customer:
    print("{0}, 커피가 준비 되었습니다.".format(customer))
    person = input("이름이 어떻게 되세요? ")

이름을 일부러 몇 번 틀리게 적은 후, 바르게 적었을 때의 출력결과는 이렇습니다.

토르, 커피가 준비 되었습니다.
이름이 어떻게 되세요? 아이언맨 # 커피 주문 손님과 일치하지 않음

토르, 커피가 준비 되었습니다.  
이름이 어떻게 되세요? 아이엠 그루트 # 커피 주문 손님과 일치하지 않음

토르, 커피가 준비 되었습니다.
이름이 어떻게 되세요? 토르 # 커피 주문 손님과 일치. while 문 탈출

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함