목차(Content)
> while 문 기초 문법
> while 작동 원리
> while 문에서 가장 중요한 한 가지
> while 문 예제
> continue문과 예제
> break문과 예제
> 다중 while문: break, continue, while True
Python while문
while문 기초 문법
while은 ‘~하는 동안에’라는 의미가 있습니다. 파이썬에서 while 문은 ‘조건이 참인 동안에’ 코드를 계속 실행시키는 반복문의 일종입니다.
while 문의 사용 방법은 아래와 같습니다. 콜론(:) 이후 들여 쓰기 된 코드는 모두 while 문에 종속되어 조건이 거짓이 될 때까지 계속 반복됩니다.
while (조건):
조건이 참인 동안 반복되는 코드
while 작동 원리
while 문의 작동 원리는 다음과 같습니다.
① 조건이 참인지 먼저 검사
② 조건이 참이라면 들여 쓰기 된 코드 블록을 실행, 조건이 거짓이라면 while 문 탈출
③ 코드 블록을 실행하고 다시 while 문 옆의 조건이 참인지 검사
④ 위 ‘② 내용’으로 이동
while 문에서 가장 중요한 한 가지
while 문은 조건이 거짓일 때까지 위에서 말씀드린 ‘작동 원리’를 계속 반복합니다. 따라서 while 문을 사용할 때 가장 중요한 것은 반복문 탈출을 위한 ‘올바른 조건’을 설정하는 것입니다.
만약 조건이 종료 조건을 찾지 못한 상태로 계속 참(True)이 유지된다면, 코드는 컴퓨터 메모리를 모두 소진할 때까지 무한 반복(루프)에 빠지게 됩니다.
# 절대로 실행하지 마세요!!!!!! 눈으로 보기만 하세요!!!!!
i = 0
while i == 0:
print("Hello")
이 코드는 무한 루프에 빠지는 대표적인 예시입니다. 왜 무한 루프에 빠질까요?
우선 i에는 0이라는 값이 들어 있습니다. 그리고 while 문의 조건에는 i가 0과 같은지를 물어보고 있습니다. 따라서 이 조건은 참입니다. 조건이 참이기 때문에 “Hello”라는 문구를 출력합니다.
그리고 다시 while 옆의 조건으로 갑니다. i는 여전히 0이므로, 조건은 참입니다. 조건이 참이기 때문에 “Hello”라는 문구를 출력하고 다시 while 옆의 조건으로 갑니다 …
이상한 게 느껴지시나요? 위 코드에는 i가 항상 0이기 때문에 조건이 항상 참입니다. 무한 루프에 빠지지 않기 위해서는 적절한 종료 조건을 설정해 주셔야 합니다. 아래 코드처럼요.
i = 0
while i == 0:
print("Hello")
i +=1
>>>>> 실행 결과: Hello
while 문 예제
1부터 100까지의 숫자 중, 2의 배수이면 “2의 배수”를 출력하고 3의 배수면 “3의 배수”라고 출력하는 코드를 작성해 보겠습니다. (단, 6의 배수이면 6의 배수라고 출력)
i = 0
while i < 101:
i += 1
if i % 15 == 0:
print("15의 배수", i)
elif i % 3 == 0:
print("3의 배수", i)
elif i % 5 == 0:
print("5의 배수", i)
else:
continue
이제 딱 하나를 제외하고는 어느 정도 감이 오실 텐데요.
15의 배수도 아니고, 3의 배수도 아니고, 5의 배수도 아니라면 아무것도 하면 안 되니까 ‘스킵’의 개념이 필요합니다. 이럴 때 사용하는 것이 ‘continue’라는 명령어입니다.
반복문을 실행하는 와중에, continue라는 명령어를 만나면 그 아래의 코드는 실행하지 않고 바로 다음 반복 구간(while 문 조건 검사)으로 넘어갑니다.
이처럼 반복문의 흐름을 제어하는 것을 반복문 제어라고 하는데요. 파이썬에서는 크게 두 가지 명령어가 있습니다.
반복문 제어: continue와 break
continue문과 예제
앞에서 이야기가 나온 continue에 대해 먼저 살펴볼까요? 파이썬에서 continue를 만나면 아래의 코드를 실행하지 않고 다음 반복문으로 넘어간다고 했습니다.
# continue 예제
i = 0
while i < 10:
i += 1
if i >= 0:
continue
print("이 출력문은 절대 실행되지 않습니다.")
i는 항상 0보다 크기 때문에, if 문에 있는 continue는 매번 실행됩니다.
continue는 밑에 있는 코드를 실행하지 않고 바로 다음 반복으로 넘어가기 때문에, print() 문은 절대 실행되지 않습니다.
1부터 50까지 숫자로 변형 369 게임을 하는 코드를 구현하겠습니다. 3의 배수가 아니면 숫자를 말하고, 3의 배수이면 스킵하는 게임입니다.
# 변형 369게임
i = 0
while i < 51:
i +=1
if i % 3 == 0:
continue
print(i)
break문과 예제
break는 ‘멈추다’라는 의미가 있는데요. 반복문이 break를 만나면 그 즉시 반복문을 탈출합니다.
while 문에서는 특히 무한 루프에 빠지기 쉬운데요. 이 경우, while 문의 조건을 잘못 설정했을 때를 대비하여 일정 횟수 이상의 반복이 진행되면 break가 실행되도록 이중 안전장치를 설정하는 것이 도움이 되는 경우가 있습니다.
# 반복 횟수가 10회이면 반복문을 탈출
count = 0
while True:
count += 1
print("이 반복문은 무한 루프입니다.")
if count == 10:
print("10회 반복으로 반복문을 긴급 탈출합니다.")
break
위의 코드는 while의 조건에 ‘True’가 있기 때문에 break 명령어가 없었다면 무한 루프인 코드입니다. 그러나 break라는 안전장치 덕분에 무한 루프에 빠지지는 않았네요.
다중 while 문: break, continue, while True
while 문 역시 중첩으로 사용할 수 있습니다. while 문을 중첩으로 사용하는 경우는 많지 않지만, 공부하는 입장이니까 배우고 넘어가겠습니다.
# 다중 while 문과 break, continue
i = 0
flag = False
while True:
while i < 1000:
print(i)
if i == 100:
flag = True
if flag:
break
i+=1
if flag:
print("반복문 종료 깃발 확인")
break
위의 코드는 단순히 0부터 1,000까지의 숫자를 출력하는데 100이 되는 순간에 모든 반복문을 종료하는 코드입니다. 코드 자체는 큰 의미가 없지만, 가지 중요한 포인트가 있습니다.
첫 번째는 while True의 개념입니다. while은 조건이 True일 때 코드를 반복 실행합니다. while True는 조건 옆에 True를 명시하여, "코드를 무한번 실행하라"라는 의미를 담고 있습니다. 보통 "몇 번을 반복해야 할지 모르겠으나, 일단 반복해 봐"와 같은 경우에 while True를 사용합니다. 이렇게 사용할 경우 당연히 가장 중요한 것은 탈출 조건(break)의 설정입니다.
두 번째는 break의 숫자입니다. break와 continue는 하나의 반복문만 제어합니다. 여러 개의 반복문을 제어하고 싶다면 break와 continue의 개수가 반복문의 개수와 일치해야 합니다.
세 번째는 flag입니다. flag는 깃발이라는 뜻인데요. ‘특정 조건을 만족하는 순간, 모든 반복문을 일괄 탈출하라’는 코드를 작성할 때 많이 활용됩니다.
물론 변수 이름을 굳이 flag로 하실 필요는 없습니다. 혹시 다른 프로그래머가 작성한 코드에서 flag라는 이름의 변수를 만난다면 ‘무언가 신호를 주는구나.’라고 직감적으로 생각하시면 될 것 같습니다.
while else문
마지막으로는 while - else 문인데요. while 문의 조건이 참이 아니어서 while문이 종료되면 else문의 코드가 실행되도록 하는 문법입니다.
i = 0
while i < 10:
print(i)
i+=1
else:
print(f"i값 : {i}입니다. 반복문을 종료합니다. ")
사실 while - else 문은 거의 사용을 안 합니다. 왜냐하면 아래의 코드와 동일하기 때문입니다. 공부를 위해 다뤄봤으니, '이런 내용도 있구나' 참고해 주시면 될 것 같습니다.
i = 0
while i < 10:
print(i)
i+=1
print(f"i값 : {i}입니다. 반복문을 종료합니다. ")
'Python > 기초' 카테고리의 다른 글
파이썬 함수 심화2: *args와 **kwargs (0) | 2023.08.27 |
---|---|
파이썬 반복문: for문의 A to Z 모든 것, 한 글로 정리하기 (0) | 2023.08.26 |
다양한 예제 문제를 통해 살펴본 파이썬 if문의 모든 것 (0) | 2023.08.24 |
파이썬 강사가 정리한 파이썬 딕셔너리 A to Z 모든 것 (2) | 2023.08.23 |
파이썬 셋(Set) 자료형, 이 글 하나로 정리 (0) | 2023.08.22 |
댓글