Python에서 while 루프를 for 루프로 변환하는 방법
while 루프는 조건에 따라 반복을 제어하는 데 유용하지만, 상황에 따라 for 루프 형태로 변환하면 코드가 더 간결하고 가독성이 좋아질 수 있습니다. Python에서는 itertools 모듈의 count() 함수를 활용하면 무한히 반복되는 while 루프를 for 루프로 손쉽게 대체할 수 있습니다.
itertools.count() 함수란?
itertools.count() 함수는 일정한 간격으로 증가하는 값들을 순차적으로 생성하는 이터레이터(iterator)를 반환합니다. 이 함수는 두 개의 매개변수를 받습니다.
- start: 시작 값으로, 기본값은 0입니다.
- step: 증가 간격으로, 기본값은 1입니다.
기본값을 그대로 사용하면 끝없이 값을 생성하는 무한 이터레이터가 만들어집니다. 따라서 루프를 멈추려면 break 문을 사용해야 합니다.
변환된 코드 예제
아래 예제는 사용자로부터 점수를 입력받아 리스트에 저장하고, 'y'를 입력하면 반복을 종료하는 코드입니다. while 루프 대신 for 루프와 itertools.count()를 함께 사용했습니다.
import itertools
percentNumbers = [ ]
finish = "n"
num = "0"
for x in itertools.count() :
num = input("enter the mark : ")
num = float(num)
percentNumbers.append(num)
finish = input("stop? (y/n) ")
if finish=='y':break
print(percentNumbers)
실행 결과
위 스크립트를 실행하면 다음과 같은 결과가 출력됩니다.
enter the mark : 11 stop? (y/n) enter the mark : 22 stop? (y/n) enter the mark : 33 stop? (y/n) y [11.0, 22.0, 33.0]
이처럼 for x in itertools.count() 구문을 사용하면 조건 없이 계속 반복되는 while True: 루프와 동일한 효과를 내면서도 for 문법을 유지할 수 있습니다. 사용자가 'y'를 입력하면 break 문이 실행되어 루프가 종료되고, 지금까지 입력된 점수들이 리스트 형태로 출력됩니다.