취뽀 기록

#열심히 살자 #취업 #공부

Python/[개념 및 문법]

[python] 반복문에서의 continue

hyunnn_00 2023. 6. 20. 11:28

a부터 b까지의 숫자들 중 짝수가 아닌 경우에만 곱을 구하는 프로그램은 어떻게 작성할 수 있을까?

이러한 경우에는 반복문 안에 continue라는 keyword를 사용해 해결해 볼 수 있다.

continue는 for, while 안에서만 사용이 가능하다.

 

continue의 포맷은 다음과 같다.

continue는 if 와 같이 쓰이며, 해당 조건이 만족하는 경우에는 아래 코드를 더 이상 실행하지 않고 다시 위로 올라가 그 다음 for loop을 실행한다.

 

continue는 조건문과 같이 쓰여야 함에 유의하자

 

for i in range(a, b + 1):
    코드1
    if 조건:
        코드2
        continue
    코드3

다음 코드에서는 i가 6, 8, 10인 경우에는 코드1 -> 코드2만 수행되고, i가 5, 7, 9인 경우에는 코드1 -> 코드3만 수행된다.

 

for i in range(5, 11):
    코드1
    if i % 2 == 0:
        코드2
        continue
    코드3

 

예시를 확인해보자

a, b = 5, 8
prod = 1
for i in range(a, b + 1):
    print(f"current val is {i}")
    if i % 2 == 0:
        print("val is even")
        continue
    
    print("val is odd")
    prod *= i

print(prod)

출력 결과

current val is 5
val is odd
current val is 6
val is even
current val is 7
val is odd
current val is 8
val is even
35

 

코드가 복잡해질수록 출력 결과만 가지고는 의도한대로 코드가 동작하고 있는 것인지를 파악하기가 어렵다.

따라서 상단에 있는 코드처럼 print를 강제로 주입하여 각각의 순간에 각 변수에 원하는 값이 적절하게 들어있는지를 확인해보는 것이 중요!

예를 들어 5부터 7까지 짝수가 아닌 경우에만 숫자들을 곱해주는 문제를 다음과 같이 코드를 작성했다고 생각해보자

 

a, b = 5, 7
prod = 1
for i in range(a, b):
    if i % 2 == 0:
        continue
    
    prod *= i

print(prod)

 

 출력 결과

5

답이 35가 나와야 나와야 하는데 계속 5가 나오고, 코드를 아무리 봐도 어느 부분이 틀렸는지 알 수가 없는 경우라면 다음과 같이 print를 주입해보자 이렇게 틀린 코드를 찾는 과정을 debugging이라 부른다.

 

a, b = 5, 7
prod = 1
for i in range(a, b):
    print(f"current val is {i}")
    if i % 2 == 0:
        print("val is even")
        continue
    
    print("val is odd")
    
    prod *= i

print(prod)

출력결과

current val is 5
val is odd
current val is 6
val is even
5

출력결과를 보니 current val로 7이 선택되는 경우가 전혀 없다는 것을 알 수 있고, 이를 통해 for loop이 숫자 7을 만들어내지 못한다는 것을 확신할 수 있으므로 이제 for loop에서 무엇이 잘못되었는지를 찾으면 된다. 다시 읽어보니 range(a, b + 1)이 아닌 range(a, b)로 되어있어 b - 1까지만 for문이 작동했다.

이런식으로 print를 적절한 위치에 넣어 각 위치마다 원하는 변수를 출력하므로서 코드가 예상한대로 올바르게 동작하는 지를 확인하여 틀린 부분을 찾아 고쳐볼 수 있다.