Development language/Python

Python-14. Loop (반복문) - while / while문 사용법 / 반복문의 강제종료 방법 / break / 반복문의 생략방법 / continue

DOT-ICD 2021. 12. 6. 00:36
728x90

Q. While?

for문처럼 python에서 사용할 수 있는 반복문의 한 종류이다. 다른점은 for문은 리스트, range, 문자열 등을 받아서 그 원소들의 개수만큼 반복되었지만, while문의 경우 조건이 만족되지 않을 때까지 반복되는 반복문이라는 점이다. 따라서,  조건식으로 간단하게 사용자가 어떤 문자열과 같은 입력을 했는지를 통해 반복문을 종료하거나 계속 실행하게 하는 등의 활용이 가능하다. 


While 사용법

while <<expression>>:

    <<block>>

의 구조로 사용할 수 있다.

아래의 코드블럭을 보자.

while <<expression>> :
    <<block>>
    <<block>>
    <<block>>
    <<block>>

이때 expression은 그 결과가 Boolean인 조건식이어야 한다.

expression의 결과가 True라면 while문은 계속해서 반복되고, False라면 while문의 반복에서 탈출하게 된다.

expression의 결과는 while문 아래의 코드들이 한번 실행되고 나서 다시 계산된다.

새로운 iteration이 시작되기 전에 expression의 조건식을 계산하고, 그 조건식의 값이 True라면 한번 더 while문 아래의 코드를 실행하고, False라면 while문을 벗어나 while문 밖의 다음 코드를 실행한다. 

while문에서도 intended 즉 들여쓰기를 통해 단락을 구분해야 한다! 아래의 포스트를 참조하자.

 

 

Python-14. Loop (반복문) - for문 / for문 사용법 / range / 중첩반복문

Q. Loop? 반복문이라는 한글이름 그대로, 특정한 기능을 일정 조건아래에서 계속해서 반복하는 코드를 반복문이라 한다. 인간보다 뛰어난 컴퓨터의 특장점이다! Python에서는 이 반복문을 for loop / w

dot-learning.tistory.com

 

아래의 예를 보면 조금 더 명확하게 이해가 될 것이다.

>>> a = 0
>>> while a < 20:
	print(a)
	a = a+1
	a = a*2

	
0
2
6
14

Infinite loops

while문을 사용할 때 주의할 점은 while문이 작동할 때, 첫번째 iteration에서도 조건식을 확인해보고, 조건식 값이 True여야만 코드가 작동한다는 점이다.

그렇다면, 조건식이 항상 True인 경우에는 어떨까?

 

이 경우에는 while문이 끊임없이 반복되게 된다. 이를 infinite loops 즉 무한반복문이라 한다.

이는 의도적으로 의도할 수도 있지만, 많은 경우 프로그래밍 과정에서 생각한 논리에 오류가 있어서 발생한다.

따라서, 이를 주의해야 한다! (만약 무한반복문이 실행되고 있다면 crtl + c를 통해 프로그램을 강제종료시킬 수 있다.)


while문 역시 중첩문으로 사용할 수 있다. 

기본적인 작동 과정은 아래의 포스트에 나오는 중첩 for문의 작동과정과 유사하다.

 

Python-14. Loop (반복문) - for문 / for문 사용법 / range / 중첩반복문

Q. Loop? 반복문이라는 한글이름 그대로, 특정한 기능을 일정 조건아래에서 계속해서 반복하는 코드를 반복문이라 한다. 인간보다 뛰어난 컴퓨터의 특장점이다! Python에서는 이 반복문을 for loop / w

dot-learning.tistory.com


Break

반복문을 사용하다보면 특정한 경우에 반복문을 종료해야 하는 경우가 있다.(while문의 경우 조건식에 표현하지 않은 경우가 발생하였을 때 종료해야 하는 경우/for문의 경우 인자로 입력받은 리스트나 range의 범위가 끝나지 않았음에도 종료해야 하는 경우)

이와 같은 경우에는 break를 통해 반복문을 탈출할 수 있다. 

아래의 코드블럭을 통해 어떻게 사용하는지 알아보자.

while(or for) <<expression>> :
    ...
    if <<condition>> :
        break

break 연산이 실행되는 순간 가장 가까운 루프를 탈출하게 된다! (코드 행 기준, break와 가장 가까운 거리에 있는 행에 적혀있는 loop가 종료된다.)

따라서, 중첩반복문등의 사용에서 break문을 사용할 시 어떤 반복문이 종료되는지 주의해서 알아보고 사용해야 한다.

 

이를 통해 while문의 조건에 True (Boolean)을 적어놓고, while문 아래의 코드에 if문을 사용하여 break를 통해 무한반복문을 탈출하는 코딩 방법도 있다.

경우에 따라 이와 같은 방법이 편할 수 있고, while문의 조건에 조건식을 작성하는 것이 편할 수도 있다.


Continue

반복문을 사용하다보면 특정한 경우에 반복문 아래의 코드를 실행하다가 어떤 코드는 실행하지 않고 다음 iteration으로 넘어가야 하는 경우가 있다. 이 경우에 continue를 사용한다.

continue의 영어 설명은 다음과 같다. skip immediately to the next iteration of the loop

(영어 설명을 그대로 읽는게 더 쉬운 것 같다!)

즉, continue가 실행되었다면, 해당 loop에서 continue 아래에 여러줄의 코드가 더 있다 하더라도, 그 코드들을 실행하지 않고 다음 iteration으로 넘어가 해당 loop에 존재하는 코드의 처음부터 다시 연산하는 것이다!

아래의 코드블럭을 보자.

while(or for) <<expression>> :
    ...
    if <<condition>> :
        continue
    ...

n-1번째 iteration에서 if의 조건식이 True값이이여서 continue가 실행되었다면, if문 바깥 아래에 있는 코드들은 실행되지 않고, 바로 n번째 iteration이 실행되어 loop 아래 코드의 처음부터 다시 실행된다.


break와 continue 사용의 주의점

대다수의 경우에 조건식을 잘 설정하거나 if문을 잘 활용해서 break와 continue의 사용을 피해갈 수 있다. 

break와 continue의 사용을 남발한다면, 다른 사람이 코드를 읽을 때 굉장히 어려워지거나, 코드를 유지보수하는데 굉장히 많은 품을 들게 하는 원인이 된다! (일명 스파게티 코드가 된다)

따라서, 정말 어쩔 수 없는 경우가 아니라면 break와 continue의 사용은 지양하도록 하자.

728x90