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를 적절한 위치에 넣어 각 위치마다 원하는 변수를 출력하므로서 코드가 예상한대로 올바르게 동작하는 지를 확인하여 틀린 부분을 찾아 고쳐볼 수 있다.
'Python > [개념 및 문법]' 카테고리의 다른 글
[python] 리스트 원소 추가, 제거, 개수 세기 append, pop, len 함수 (0) | 2023.06.27 |
---|---|
조건을 단 하나라도 만족하는 경우/ 조건 판단 / bool 타입 변수 변경 (0) | 2023.06.21 |
[판다스] 시계열 객체 변환, 시계열 데이터 만들기, 날짜 데이터 분리, 날짜 인덱싱 (0) | 2023.06.19 |
[python] 정규화(최대절대값 정규화, 최소값-최대값 정규화) (1) | 2023.06.19 |
[사이킷런] 더미변수 만들기, 라벨 인코딩, 원핫 인코딩 (0) | 2023.06.19 |