목표
*
**
***
****
*****
반복문 안에 반복문이 들어가는 형태를 중첩 루프(다중 루프)라고 한다. 그리고 반복문의 루프 인덱스 변수는 index의 첫 글자를 따서 i를 사용하는데, 반복문 안에 반복문이 들어갈 때는 변수 이름을 i, j, k처럼 i부터 알파벳 순서대로 짓는다.
중첩루프 예시
for i in range(횟수): # 바깥쪽 루프
for j in range(횟수): # 안쪽 루프
가로 처리 코드
코드
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:0 j:1 j:2 j:3 j:4 i:0\n
j:0 j:1 j:2 j:3 j:4 i:1\n
j:0 j:1 j:2 j:3 j:4 i:2\n
j:0 j:1 j:2 j:3 j:4 i:3\n
j:0 j:1 j:2 j:3 j:4 i:4\n
중첩 루프는 2차원 평면을 다룰 수 있으므로 이미지 처리, 영상 처리, 좌표계 처리 등에 주로 쓰인다.
for i in range(5):
for j in range(5):
print('*', end='') # 별 출력. end에 ''를 지정해서 줄바꿈을 하지 않음
print() # 가로 방향으로 별을 그린 뒤 다음 줄로 넘어감
# (print는 출력 후 기본적으로 다음 줄로 넘어감)
**********
**********
**********
**********
**********
**********
**********
**********
**********
**********
print는 출력 후 기본적으로 다음 줄로 넘어간다는 말은 (end='\n')
for i in range(5): print(i)
이런 말이다. (하나하나 일일이 말해야 알겠다...ㅠ)
0
1
2
3
4
for i in range(4):
for j in range(11):
print('*', end='')
print()
***********
***********
***********
***********
for i in range(10): # 0부터 9까지 10번 반복. 세로 방향
for j in range(10): # 0부터 9까지 10번 반복. 가로 방향
if j <= i: # 세로 방향 변수 i만큼
print('*', end='') # 별 출력. end에 ''를 지정하여 줄바꿈을 하지 않음
print() # 가로 방향으로 별을 다 그린 뒤 다음 줄로 넘어감
# (print는 출력 후 기본적으로 다음 줄로 넘어감)
*
**
***
****
*****
******
*******
********
*********
**********
if j == i:처럼 가로 방향 변수와 세로 방향 변수가 같을 때만 별을 출력하면 대각선이 되겠지?
for i in range(8): # 0부터 7까지 8번 반복. 세로 방향
for j in range(8): # 0부터 7까지 8번 반복. 가로 방향
if j == i: # 세로 방향 변수와 같을 때
print('*', end='') # 별 출력. end에 ''를 지정하여 줄바꿈을 하지 않음
print() # 가로 방향으로 별을 다 그린 뒤 다음 줄로 넘어감
# (print는 출력 후 기본적으로 다음 줄로 넘어감)
*
*
*
*
*
*
*
*
???
IDLE이나 콘솔에서는 문자 출력을 않아면, 다음 문자는 현재 위치에 출력되서 모두 왼쪽으로 몰리게 된다. 따라서 별을 출력하지 않는 부분에서는 print로 공백을 출력해줘야 별이 원하는 위치에 오게 된다.
for i in range(8): # 0부터 7까지 8번 반복. 세로 방향
for j in range(8): # 0부터 7까지 8번 반복. 가로 방향
if j == i: # 세로 방향 변수와 같을 때
print('*', end='') # 별 출력. end에 ''를 지정하여 줄바꿈을 하지 않음
else: # 세로 방향 변수와 다를 때
print(' ', end='') # 공백 출력. end에 ''를 지정하여 줄바꿈을 하지 않
print() # 가로 방향으로 별을 다 그린 뒤 다음 줄로 넘어감
# (print는 출력 후 기본적으로 다음 줄로 넘어감)
*
*
*
*
*
*
*
*