Programming/Python

[코딩도장-파이썬] 중첩 루프

Supreme_YS 2020. 11. 16. 20:19

● 중첩 루프를 사용하여 아래와 같은 계단식 *(별, 아스테리스크)를 출력하기

*

**

***

****

*****

다음과 같이 반복문 안에 반복문이 들어가는 형태를 중첩 루프(다중 루프)라고 한다. 그리고 반복문의 루프 인덱스 변수는 index의 첫 글자를 따서 i를 사용하는데, 반복문 안에 반복문이 들어갈 때는 변수 이름을 i, j, k처럼 i부터 알파벳 순서대로 짓는다. 여기서는 반복문이 두 개이므로 i와 j를 사용한다.(변수 이름을 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: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
설명

출력 결과가 좀 복잡해 보이지만 간단한 내용입니다. 먼저 바깥쪽 루프로 시작하여 안쪽 루프가 가로 방향으로 j 값을 출력합니다. end에는 줄바꿈을 하지 않기 위해서 ' '를 지정했습니다. 여기서는 각 값이 붙어서 출력되지 않도록 ''대신 ' '을 지정하여 공백 한 칸을 띄워주었습니다.

그리고 가로 방향이 출력이 끝나면 바깥쪽 루프에서 i 값과 개행 문자를 출력하여 세로 방향을 처리하게 됩니다. 여기서는 \n을 화면에 직접 보여주기 위해 \\n으로 출력했습니다.

 

5 X 5 별상자 만들기  3 X 7 별상자 만들기 
for i in range(5):          # 5번 반복, 바깥쪽 i는 세로방향 

    for j in range(5):      # 5번 반복, 안쪽 j는 가로방향 

        print('*', end='')  # 별 출력, end에 ''를 지정하여 줄바꿈을 하지 않음 
  
    print()                 # 가로 방향으로 별을 다 그린 뒤 다음 줄로 넘어감 
for i in range(3): 

    for j in range(7): 

        print('★', end='') 

    print()
결과값 결과값
*****
*****
*****
*****
*****
★★★★★★★
★★★★★★★
★★★★★★★

 

대각선 별 출력하기 대각선 별 출력하기
for i in range(5):        # 0부터 4까지 5번 반복. 세로 방향
    
    for j in range(5):    # 0부터 4까지 5번 반복. 가로 방향
        
        if j == i:                # 세로 방향 변수와 같을 때
            
            print('*', end='')    # 별 출력. end에 ''를 지정하여 줄바꿈을 하지 않음
            
    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()    # 가로 방향으로 별을 다 그린 뒤 다음 줄로 넘어감
결과값 결과값
*
*
*
*
*
*    
 *   
  *  
   * 
    *