Unit 19
1. 중첩 루프 사용하기
- 반복문 안에 반복문이 들어가는 형태를 중첩 루프(다중 루프)라고 한다.
- 반복문의 루프 인덱스 변수는 index의 첫 글자를 따서 i 를 사용하는데, 반복문에서 반복문이 들어갈 때(중첩 루프)는 변수 이름을 i - j - k 처럼 i 부터 알파벳 순서대로 짓는다.
중첩 루프(다중 루프) - i 를 사용하는 바깥쪽 루프는 세로 방향을 처리하고, j 를 사용하는 안쪽 루프는 가로 방향을 처리한다.
for i in range(5): # 5번 반복. 바깥쪽 루프는 세로 방향 for j in range(5): # 5번 반복. 안쪽 루프는 가로 방향 print('j:', j, sep='', end=' ') # j값 출력. end에 ' '를 지정하여 줄바꿈 대신 한 칸 띄움 print('i:', i, '\\n', sep='') # i값 출력, 개행 문자 모양도 출력 # 가로 방향으로 숫자를 모두 출력한 뒤 다음 줄로 넘어감 # (print는 기본적으로 출력 후 다음 줄로 넘어감)
중첩 루프 실행 결과
- 먼저 안쪽 루프가 가로 방향으로 j 값을 출력하고 sep = ' ' 과 end = ' '를 지정했기 때문에 한 칸씩 띄워주며 줄바꿈은 하지 않는다.
- 가로 방향 출력이 끝나면 바깥쪽 루프에서 i 값과 개행 문자를 출력하여 세로 방향을 출력하게 된다.
- 이처럼 중첩 루프는 2차원 평면을 다룰 수 있으므로 이미치 처리, 영상 처리, 좌표계 처리 등에 주로 쓰인다.
2. 사각형으로 별 출력하기
for i in range(5): # 5번 반복. 바깥쪽 루프는 세로 방향
for j in range(5): # 5번 반복. 안쪽 루프는 가로 방향
print('*', end='') # 별 출력. end에 ''를 지정하여 줄바꿈을 하지 않음
print() # 가로 방향으로 별을 다 그린 뒤 다음 줄로 넘어감
# (print는 출력 후 기본적으로 다음 줄로 넘어감)
# 실행결과
*****
*****
*****
*****
*****
- 이 방식은 print에 end = ' ' 를 지정했을 때 줄바꿈이 되지 않고 오른쪽 방향으로 문자가 계속 붙는 특성을 이용한 것이다.
- 바깥쪽의 반복문은 안쪽 반복문을 실행하면서 별을 다섯개씩 그리며 print()를 이용하여 줄바꿈을 한 뒤 다시 별 다섯개를 그리는 것을 총 다섯 번 반복한다.
- for 반복문의 조건식을 수정하여 사각형의 모양을 바꿀 수 있다.
for i in range(3): # 3번 반복. 세로 방향 for j in range(7): # 7번 반복. 가로 방향 print('*', end='') # 별 출력. end에 ''를 지정하여 줄바꿈을 하지 않음 print() # 가로 방향으로 별을 다 그린 뒤 다음 줄로 넘어감 # (print는 출력 후 기본적으로 다음 줄로 넘어감) # 실행결과 ******* ******* *******
3. 계단식으로 별 출력하기
- 계단식으로 출력할 때는 별을 출력하지 않는 부분이 있기 때문에 if 조건문으로 print를 제어해야 한다.
for i in range(5): # 0부터 4까지 5번 반복. 세로 방향 for j in range(5): # 0부터 4까지 5번 반복. 가로 방향 if j <= i: # 세로 방향 변수 i만큼 print('*', end='') # 별 출력. end에 ''를 지정하여 줄바꿈을 하지 않음 print() # 가로 방향으로 별을 다 그린 뒤 다음 줄로 넘어감 # (print는 출력 후 기본적으로 다음 줄로 넘어감)
- 별의 개수는 세로 방향인 줄의 위치에 비례하므로 조건식도 세로 방향 변수 i 에 맞춰서 작성해야 한다.
if j <= i: # 세로 방향 변수 i만큼 print('*', end='') # 별 출력. end에 ''를 지정하여 줄바꿈을 하지 않음
- 이렇게 if 조건문을 작성하여 가로 방향(j)으로 별을 출력할 때는 세로 방향(i)의 변수만큼 출력하도록 해서 i 가 증가하면 i 만큼 별이 늘어나게 된다.
- i 가 0일 때 j 는 0부터 4까지 반복하지만 j <= i 를 만족하는 경우는 j 가 0일 때 뿐이므로 별이 한 번만 출력된다.
- 다시 i 가 1이 때는 j <= 1 를 만족하는 경우는 j 가 0, 1일 때이므로 별이 두 번 출력된다.
4. 대각선으로 별 출력하기
- 출력 부분을 수정하면 별을 대각선으로 출력할 수 있다.
- 하지만 출력 결과를 보면 그냥 세로로 출력된다 ㅠㅠ?for i in range(5): # 0부터 4까지 5번 반복. 세로 방향 for j in range(5): # 0부터 4까지 5번 반복. 가로 방향 if j == i: # 세로 방향 변수와 같을 때 print('*', end='') # 별 출력. end에 ''를 지정하여 줄바꿈을 하지 않음 print() # 가로 방향으로 별을 다 그린 뒤 다음 줄로 넘어감 # (print는 출력 후 기본적으로 다음 줄로 넘어감) # 실행결과 * * * * *
- IDLE나 콘솔에서는 문자 출력을 하지 않으면 다음 문자가 현재 위치에 출력되므로 별을 출력하지 않는 부분에서는 print로 공백을 출력해줘야 한다.
- 가로 방향과 세로 방향의 변수 값이 같을 때 별을 출력하고, 같지 않을 때는 공백을 출력했다.for i in range(5): # 0부터 4까지 5번 반복. 세로 방향 for j in range(5): # 0부터 4까지 5번 반복. 가로 방향 if j == i: # 세로 방향 변수와 같을 때 print('*', end='') # 별 출력. end에 ''를 지정하여 줄바꿈을 하지 않음 else: # 세로 방향 변수와 다를 때 print(' ', end='') # 공백 출력. end에 ''를 지정하여 줄바꿈을 하지 않음 print() # 가로 방향으로 별을 다 그린 뒤 다음 줄로 넘어감 # (print는 출력 후 기본적으로 다음 줄로 넘어감) # 실행 결과 * * * * *
※ 바깥쪽 루프가 세로 방향, 안쪽 루프가 가로 방향을 처리한다는 점을 기억하기
'Python 코딩도장' 카테고리의 다른 글
파이썬 코딩도장 Unit 21 정리 : 터틀 그래픽스 (0) | 2022.01.17 |
---|---|
파이썬 코딩도장 Unit 20 정리 : FizzBuzz (0) | 2022.01.16 |
파이썬 코딩도장 Unit 13 ~ Unit 20 심사문제 풀이 (0) | 2022.01.16 |
파이썬 코딩도장 Unit 18 정리 : break, continue로 반복문 제어 (0) | 2022.01.15 |
파이썬 코딩도장 Unit 17 정리 : while 반복문 (0) | 2022.01.15 |