18.1 break로 반복문 끝내기
https://dojang.io/mod/page/view.php?id=2253
반복문을 제어하는 방법을 알아보자.
break
는 for와 while의 루프에서 벗어나기 위해 사용한다.
continue
는 break와 비슷하지만 약간 다른 점이 있다.
break는 제어흐름을 중단하고 빠져 나오지만 (while문을 아예 빠져나옴)
continue는 제어흐름(반복)을 유지한 상태에서 코드의 실행만 건너뛰는 역할을 한다. (while문 다음 반복을 시작하러 감)
🔹 break: 제어흐름 중단 (while문을 아예 빠져나옴)
🔹 continue: 제어흐름 유지, 코드 실행만 건너뜀 (while문 안에서 while문 처음으로 돌아감)
while 무한 루프에서 숫자를 1씩 증가시키다가 변수 i
가 100일 때 반복문을 끝내도록 만들어보자.
i = 0
while True: # 무한 루프
print(i)
i += 1 # i를 1씩 증가시킴
if i == 100: # i가 100일 때
break # 반복문을 끝냄 (while의 제어흐름을 벗어남)
---------------------------------------------------
0
1
2
... (생략)
97
98
99
while에 True를 지정하여 무한 루프를 만들고,
그 안에서 i
를 1씩 증가시킨다.
그리고 if를 사용하여 i
가 100이면 break를 실행하도록 한다.
무한 루프여도 break가 실행이 돼서 99까지만 출력이 된다.
반복문 안에서 break를 실행하면 반복문은 바로 끝난다.
for에서도 break의 동작은 같다.
for i in range(10000): # 0부터 9999까지 반복
print(i)
if i == 100: # i가 100일 때
break # 반복문을 끝냄. (for의 제어흐름을 벗어남)
-------------------------------------------------
0
1
2
... (생략)
98
99
100
for에 range(10000)을 지정했으므로 0부터 9999까지 반복한다.
하지만 i가 100일 때 break를 실행하므로 0부터 100까지만 출력된다.
continue가 실행되면 continue문 아래의 코드를 실행하지 않고 건너뛰고 반복문의 처음으로 돌아가서 다음 반복을 시작한다.
for문 안의 문장을 수행하는 도중에 continue문을 만나면 for문의 처음으로 돌아가게 된다.
for i in range(100):
if i % 2 == 0: # i를 2로 나눴을 때 나머지가 0이면 (짝수)
continue # 아래 코드를 실행하지 않고 건너뛴다
print(i) # 홀수인 경우에만 출력한다.
---------------------
1
3
5
... (생략)
95
97
99
i
가 짝수이면 continue를 실행하여 print를 건너뛰고 for문 처음으로 돌아가고, 홀수이면 print문을 실행하여 숫자를 출력한다.
반복문 안에서 continue를 실행하면 continue 아래의 코드는 실행하지 않고 건너뛴 뒤 다음 반복을 시작한다.
continue 문장이 수행되면 while문의 맨 처음으로 돌아간다.
i = 0 # 초기식
while i < 100: # i가 100보다 작을 때까지 반복 (조건식)
i += 1 # i를 1씩 증가시킨다 (변화식)
if i % 2 == 0: # i를 2로 나눴을 때 나머지가 0이면 (짝수이면)
continue # 아래 코드를 실행하지 않고 다음 반복 시작
print(i) # 홀수이면 출력한다
--------------------
1
3
5
... (생략)
95
97
99
여기서는 while문에 조건식 i < 100
을 사용해서 반복 횟수를 정한 뒤 continue를 사용했다. 만약 무한 루프에서 continue를 사용하면 홀수가 계속 출력되고 반복문은 끝나지 않는다. while에서 continue를 사용할 때 이 부분을 주의해야 한다.
for, while의 반복할 코드에서 아무 일도 하지 않지만, 반복문의 형태를 유지하고 싶다면 pass를 사용하면 된다.
for i in range(10): # 10번 반복
pass # 아무 일도 하지 않음
while True: # 무한 루프
pass # 아무 일도 하지 않음
count = int(input('반복할 횟수를 입력하세요: '))
i = 0
while True: # 무한 루프
print(i) # 반복할 코드
i += 1 # 변화식
if i == count: # i가 입력받은 값과 같을 때
break # 반복문을 빠져나간다
--------------------
반복할 횟수를 입력하세요: 5 (입력)
0
1
2
3
4
int
를 사용하여 input에서 나온 문자열을 정수로 변환해준다.
반복문 안에서는 i
의 값을 출력하고, 변화식에서는 i
를 1 씩 증가시킨다. 그리고 i
가 count의 값과 같으면 break를 실행해서 while문을 나간다.
count = int(input('반복할 횟수를 입력하세요: '))
for i in range(count+1): # 0부터 count까지 반복 (range가 끝 숫자 포함 안 하니까 1을 더해준다)
if i % 2 == 0: # i를 2로 나누었을 때 나머지가 0이면 (짝수이면)
continue # 아래 코드를 실행하지 않고 for문 처음으로 돌아감
print(i) # 짝수가 아니면 (홀수이면) 출력한다
------------------------------------------
반복할 횟수를 입력하세요: 9 (입력)
1
3
5
7
9
짝수이면 continue문 실행
홀수이면 출력
다음 소스 코드를 완성하여 0과 73 사이의 숫자 중 3으로 끝나는 숫자만 출력되게 만드세요.
i = 0
while True:
if i % 10 != 3: # i를 10으로 나눴을 때 나머지가 3이 아니면
i += 1 # i에 1을 더하고
continue # while문 처음으로 돌아간다
if i > 73: # elif문으로 써도 됨
break
print(i, end=' ') # 나머지가 3이고 73보다 크지 않으면 출력
i += 1
-----------------------
3 13 23 33 43 53 63 73
먼저 3으로 끝나는 숫자를 구하려면 i를 10으로 나눈 뒤 나머지가 3인지 검사하면 된다.
3으로 끝나는 숫자만 출력되도록 하려면 if i % 10 != 3:
과 같이 if 조건문을 만들어서 3으로 끝나지 않는 숫자일 때 continue로 건너뛴다. 이렇게 하면 그 아래에 있는 print에서 3으로 끝나는 숫자만 출력할 수 있다. 그리고 continue로 코드를 건너뛰면 아래에 있는 i += 1
까지 건너뛰게 되므로 continue 위에 i += 1
을 넣어주어야 한다.
표준 입력으로 정수 두 개가 입력됩니다(첫 번째 입력 값의 범위는 1~200, 두 번째 입력 값의 범위는 10~200이며 첫 번째 입력 값은 두 번째 입력 값보다 항상 작습니다). 다음 소스 코드를 완성하여 첫 번째 정수와 두 번째 정수 사이의 숫자 중 3으로 끝나지 않는 숫자가 출력되게 만드세요. 정답에 코드를 작성할 때는 while True:에 맞춰서 들여쓰기를 해주세요.
start, stop = map(int, input().split())
i = start
while True:
if i % 10 == 3:
i += 1 # continue 위에 꼭 쓰기
continue
if i > stop:
break
print(i, end=' ')
i += 1
---------------------------------------------
입력: 1 20
결과: 1 2 4 5 6 7 8 9 10 11 12 14 15 16 17 18 19 20
입력: 21 33
결과: 21 22 24 25 26 27 28 29 30 31 32
continue로 코드를 건너뛰면 아래에 있는 i += 1
까지 건너뛰게 되므로 continue 위에 i += 1
을 넣어주어야 한다.
그리고 while 반복문에 True가 지정되어 있으므로 무한 루프이다. 따라서 if 조건문을 사용하여 break로 루프를 중단한다. i
가 stop보다 클 때 중단해야 stop의 값까지 출력이 된다.