pass, continue 그리고 break에 대한 이해(python)

HJ seo·2022년 8월 20일
0

edu

목록 보기
3/3

잡담

프로그래머를 준비하기 이전 학부에서 다뤘던 python에서 pass, continue, break의 존재는 알았지만 당시에는 이 차이에 대해 잘 몰랐고, 그나마 while과 함께 break만 많이 사용했었다.

본격적으로 프로그래머를 준비하기 시작하면서 이 차이에 대해 자세하게 알게 되었는데 이번 포스팅에 대해서는 이 차이에 대해 짧게 써보려고 한다.

loop

이 세 가지 차이에 대해 설명하기에 앞서 우선 loop의 개념을 확인할 필요가 있다. loop를 말할 때면 보통 떠올릴 수 있는 것이 무한루프이다. 이거는 끊임없이 반복된다는 소리인데 python식으로 말하자면 break없는

while True:

와 같다.. 본론으로 돌아와서 한마디로 loop는 반복을 의미하는 단어이다. 그리고 python에는 대표적인 2개의 반복문이 존재하는데 forwhile이다.
while은 앞서 말했던 것 처럼 무한루프를 만들 수 있는 반복문으로 무한루프가 아니게 만들려면 간단히 True 대신 조건을 붙여주면 된다. 가령

while x != 1:

로 쓰면 x가 1이 되기 전까지 계속해서 루프가 돈다는 의미가 된다.

foriterator(반복자)와 같이 쓰이는 반복문으로 보통 유한번 내로 끝나는 반복문이다. 가령

x = [1,2,3,4]
for i in x:
    print(x)
'''
output :
1
2
3
4
'''

처럼 쓰인다. 하지만 이것도 무한반복으로 쓰일 수 있기는 한데 간단히 무한번 iterate 되는 iteratorin 뒤에 붙이면 되기 때문이다.
이에 대한 간단한 예시로는 itertools 모듈의 cycle 혹은 refeat를 확인해보면 된다.


이제 본격적으로 위의 세 가지 pass, continue, break의 차이를 알아보도록 하자.

pass

아마도 예전, 코딩컨벤션이 엄격했을 때 쓰지 않았을때 썼던 코드인 것 같은 pass..
그 역할은 내가 사용했을 때는 단순히 loop 안에서, if & else 문에서 if 보단 else에 중요한 조건이 들어가있을 때 썼던 그런 받아주기 형식의 명령어이다.

가령 예를 들어 [0,3]x[0,3] 좌표평면 위에서 x,y값이 둘 다 정수인 정점중 [1,2]x[1,2]에 없는 점을 구하는 것을 생각해보자.
이 경우 if보다는 else를 쓰는 것이 효과적일 것이다.

for i in range(0,4):
    for j in range(0,4):
        if 1<=i<=2 and 1<=j<=2:
            pass
        else:
            print(i,j)

(물론 요즘 난 pass 대신 1 하나 집어넣어준다...)

continue

반복문 안에서 반복을 한번 넘기는 명령어.
일반적으로 쓰이게 되는 서순은 다음과 같다.

for i in iterator:
    x : 'loop가 돌 때 항상 실행되어야 하는 명령'
    
    if 'loop를 끝내야 하는 조건':
        continue
        
    y : 'loop를 끝내야 하는 조건에 걸리지 않았을 때 실행되어야 하는 명령'

모든 프로그래밍 언어의 특성상 코드의 실행 순서는 위에서 아래로 향하게 된다. 그리고 continue의 경우 처음 설명과 같이 반복을 한번 넘기는 명령어이다. 때문에 x 부분에는 loop가 돌때마다 반드시 실행되야 하는 명령들(예를 들어 iteratorlen을 사용할 수 없을 때 전체 갯수를 카운트해야한다거나..)이 들어가야 하고, y 부분에는 loop를 끝내야 하는 조건이 아닌 경우 실행되야 하는 명령들을 넣어주면 된다.
아래 예시는 위의 설명을 단적으로 보여주는 예시.

for i in range(5):
	if i == 3:
    	continue
    print(i)
'''
output : 
0
1
2
4
'''

break

반복문 안에서 반복을 중지시키는 명령어. 가장 근접한 반복분의 반복만을 중지시킨다.
우선 간단한 예시로는

for i in range(5):
    if i == 3:
        if 1:
            if 1:
                break
    print(i)
    
'''
output : 
0
1
2
'''

말 그대로 가장 근접한 반복문을 중지시킨다(if는 반복문이 아니기 때문에).
그리고 아직까지 좀 해깔릴 수가 있어서 이에 대한 이해를 돕기 위해 추가적인 코드도 작성해놓는다.

cnt = 0
while True:
    for i in range(5):
        print(i)
        if i == cnt:
            break
    
    cnt += 1
    if cnt == 4:
        break
        
'''
output : 
0 # for문 break
0
1 # for문 break
0
1
2 # for문 break
0
1
2
3 # for문 break & while문 break
'''

본격적으로 공부하기 이전 python을 사용했을 때는 break의 말 그대로의 뜻 때문에 exit()과 정말 많이 혼동했었지만 exit()은 그대로 pythonrun을 종료하는 것이고, break는 위에서 말했듯 반복을 즉시 한번(가장 가까운) 중지시키는 명령어이다.


마지막으로 이를 이용해서 소수를 구하는, 예쁜 코드 하나 넣고 마무리를 해본다.(방법에 따라 다르지만 웬만해선 에라토스테네스의 체를 이용해서 구하는것이 훨씬 효과적인 것이 함정이다.)

n = 100
Prime = [2]
for i in range(3,n+1):
    for j in Prime:
        if i%j == 0:
            break
    else:
        Prime.append(i)
 
print(Prime)

'''
output :
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
'''
profile
다양한 분야에 관심이 많은 초보 개발자 입니다.

0개의 댓글