Unit 18. break, continue로 반복문 제어하기
break는 for과 while문법에서 제어 흐름을 벗어나기 위해 사용된다. 반복 루프를 완전히 중단시킨다. continue 는 제어흐름(반복)을 유지한 상태에서 코드의 실행만 건너뛰는 역활을 한다.
18.1.1 while에서 break로 반복문 끝내기
무한루프에서 변수 i가 10이면 반복문을 끝내는 코드는 다음과 같다.
i = 0
while True:
print(i)
i += 1
if i == 10:
break
반복문 안에서 break가 실행되면 반복문은 즉시 종료된다.
18.1.2 for 에서 break로 반복문 끝내기
for문에서도 break의 동작은 동일하다.
for i in range(10000):
print(i)
if i == 5:
break
위의 코드는 range에 10000을 지정했으므로 0부터 9999까지 반복해야 하지만, i는 5일때 break를 하므로 0부터 5까지만 출력하고 반복문을 끝낸다.
18.2.1 for에서 continue로 코드 실행 건너뛰기
다음은 0에서 10 까지 반복하며 홀수만 출력하는 코드이다.
for i in range(10):
if i % 2 == 0:
continue
print(i)
0부터 9까지 반복하고, i가 짝수이면 continue를 실행한다. continue가 실행되면 아래 코드들은 실행하지 않고 반복문 처음으로 돌아오기 때문에 홀수일때만 i가 출력된다.
18.2.2 while반복문에서 continue로 코드 실행 건너뛰기
while문에서도 continue의 동작은 동일하다.
i = 0
while i < 10:
i += 1
if i % 2 == 0:
continue
print(i)
while문에서도 마찬가지로 continue문을 만나면 아래 코드를 건너뛰고 반복문 처음으로 돌아간다. 무한루프에서 continue를 사용하면 반복문은 끝나지 않는다.
18.3 입력한 횟수대로 반복하기
cnt = int(input())
i = 0
while True:
print(i)
i += 1
if i == cnt:
break
값을 입력받아 cnt에 저장하고, 무한루프 하는 반복문을 만들어 숫자를 출력시킨 후, 입력한 수만큼 반복하면 반복문을 종료시킨다.
18.3.1 입력한 숫자까지 홀수 출력하기
cnt = int(input())
for i in range(cnt+1):
if i % 2 == 0:
continue
print(i)
입력한 숫자까지 출력해야 했기 때문에 반복 횟수를 입력 숫자 + 1 로 지정하였다. 2 로 나눴을 때 나머지가 0 이면 짝수이기 때문에 continue를 실행하고 홀수이면 해당 숫자를 출력한다.
18.4 퀴즈
정답은 b,d이다.
정답은 b이다. 3의 배수는 3으로 나눴을 때 0 이며, 3의 배수라고 후에 반복문이 끊기면 안되기 때문에 continue를 사용해야 한다.
정답은 c이다. 10 까지반 출력해야 하기 때문에 10이 출력되면 break로 반복문을 종료시켜야 한다.
18.5 연습문제: 3으로 끝나는 숫자만 출력하기
정답은 다음 코드와 같다.
if i % 10 != 3:
continue
if i > 73:
break
3으로 끝나는 숫자는 10으로 나눴을 때 나머지가 3이므로 나머지가 3이 아니면 continue로 반복문 처음으로 되돌아가고, 숫자가 73보다 커지면 break로 반복문을 종료해야 한다.
18.6 심사문제: 두 수 사이의 숫자중 3으로 끝나지 않는 숫자 출력하기
정답은 다음 코드와 같다.
if i % 10 == 3:
i += 1
continue
if i > stop:
break
정답이 while 조건식 바로 아래에 들어가 코드를 검사하므로 들여쓰기를 해줘야 한다. 3으로 끝나는 숫자가 나오면 continue를 수행하는데, 그러면 밑의 i+=1 이 진행되지 않기 때문에 continue 전에 i에 1을 추가 시켜야 한다.
Unit 19. 계단식으로 별 출력하기
19.1 중첩 루프 사용하기
콘솔은 2차원 평면이기 때문에 콘솔에서 별을 일정한 모양으로 출력하려면 반복문을 두 개 사용하는 것이 편리하다. 반복문 안에 반복문이 들어가는 형태를 중첩루프(다중루프)라고 한다. 그리고 반복문의 루프 인덱스 변수는 i, j, k와 같이 i 부터 알파벳 순서대로 주로 사용한다.
for i in range(5):
for j in range(5):
print('j:', j, sep='', end='')
print('i:', i, '\\n', sep='')
i를 사용하는 바깥쪽 루프는 세로 방향을 처리하고, j를 사용하는 안쪽 루프는 가로 방향을 처리한다. end=''는 줄바꿈을 하지 않기 위해서 지정한 것이다. 가로 방향 출력이 끝나면 i 값과 개행문자를 처리하여 세로 방향을 처리한다. 중첩루프는 2차원 평면을 다룰 수 있어서 이미지처리, 영상처리, 좌표 처리계 등에 주로 사용된다.
19.2 사각형으로 별 출력하기
5x5 형태의 사각형을 출력하는 코드는 다음과 같다.
for i in range(5):
for j in range(5):
print('*', end='')
print()
가로, 세로 둘 다 5번씩 반복하여 안쪽 for 문에서 end=''으로 지정하여 줄바꿈을 하지 않고 가로로 별 5개를 출력하고, 바깥쪽 for문에서 print()로 줄바꿈을 한다.
반복문을 다음과 같이 수정하면 7x3 크기의 사각형을 출력할 수 있다.
for i in range(3):
for j in range(7):
print('*', end='')
print()
19.3 계단식으로 별 출력하기
계단식으로 별을 출력할 때는 별이 출력되지 않는 부분을 if 조건문으로 제어해야 한다.
for i in range(5):
for j in range(5):
if(j <= i):
print('*', end='')
print()
별의 개수는 세로 줄의 위치(첫번째줄, 두번째줄, ...) 만큼 출력되기 때문에 세로 방향의 변수 만큼 출력되도록 조건을 추가하였다.
i 가 0이라면 5번 반복되도 조건을 만족시키는 경우가 j가 0일때 이기 때문에 별이 하나만 출력된다.
19.3.1 대각선으로 별 출력하기
위 코드의 조건문을 다음과 같이 수정하면 대각선으로 별을 출력할 수 있다.
for i in range(5):
for j in range(5):
if(j == i):
print('*', end='')
else:
print(' ', end='')
print()
가로방향 변수와 세로방향 변수가 같을때만 *을 출력하고, 같지 않을 때는 공백을 출력하여 대각선으로 별이 출력되도록 하였다.
19.4 퀴즈
정답은 c,e이다. i가 들어있는 반복문은 세로 방향을 처리하고, print()는 줄바꿈을 한다.
정답은 c이다.
19.5 연습문제: 역삼각형 모양으로 별 출력하기
정답은 다음 코드와 같다.
if j < i:
print(' ')
else:
print('*', end='')
위에가 넓고 아래로 갈수록 좁아지는 삼각형 형태이고, 공백이 먼저 나온 후 별이 나오기 때문에 j가 i 보다 작으면 공백을 출력하고 이 조건이 거짓이 되면 *을 출력한다.
19.6 심사문제: 산 모양으로 별 출력하기
hei = int(input())
for i in range(hei):
for j in reversed(range(hei)):
if j > i:
print(' ', end='')
else:
print('*', end='')
for j in range(hei):
if j < i:
print('*', end='')
print()
삼각형을 반으로 나눠서 반 먼저 출력하고 나머지 반을 붙이는 식으로 해야 한다.
이 모양의 삼각형을 먼저 출력해야 하는데, 첫줄이 공백 4칸에 별 하나 나오므로 reversed(range(hei))로 뒤집으면 된다. 그리고 가로가 세로보다 작을 때 별을 출력하는 반복문을 더해서 두번째 줄 부터 별을 하나씩 추가해서 출력할 수 있다.
'Project H4C Study Group' 카테고리의 다른 글
[Project H4C] 파이썬 코딩도장(7) (0) | 2021.01.26 |
---|---|
[Project H4C] 파이썬 코딩도장(6) (0) | 2021.01.25 |
[Project H4C] 파이썬 코딩도장(4) (0) | 2021.01.21 |
[Project H4C] 파이썬 코딩도장(3) (0) | 2021.01.20 |
[Project H4C] 파이썬 코딩도장(2) (0) | 2021.01.19 |