Unit 19. 계단식으로 별 출력하기

이번에는 지금까지 배운 for, while 반복문과 if 조건문을 사용하여 계단식으로 별(*)을 출력해보겠습니다.

*
**
***
****
*****

19.1 중첩 루프 사용하기

콘솔(터미널, 명령 프롬프트)은 2차원 평면이므로 별을 일정한 모양으로 출력하려면 반복문을 두 개 사용하는 것이 편리합니다.

다음과 같이 반복문 안에 반복문이 들어가는 형태를 중첩 루프(다중 루프)라고 합니다. 그리고 반복문의 루프 인덱스 변수는 index의 첫 글자를 따서 i를 사용하는데 반복문 안에 반복문이 들어갈 때는 변수 이름을 i, j, k처럼 i부터 알파벳 순서대로 짓습니다. 여기서는 반복문이 두 개이므로 ij를 사용합니다(변수 이름을 ij로 짓는 것은 강제된 사항은 아니지만 오래 전부터 관례적으로 사용하고 있습니다. 특히 이미 만들어진 소스 코드에서 많이 볼 수 있으므로 눈에 익혀두는 것이 좋습니다).

그림 19-1 중첩 루프
<그림 ‎19 1 중첩 루프

i를 사용하는 바깥쪽 루프는 세로 방향을 처리하고, j를 사용하는 안쪽 루프는 가로 방향을 처리합니다. 다음 내용을 IDLE의 소스 코드 편집 창에 입력한 뒤 실행해보세요.

multiple_loop.py

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는 기본적으로 출력 후 다음 줄로 넘어감)

소스 코드를 실행하면 다음과 같은 모양으로 출력됩니다.

그림 19-2 중첩 루프 실행 결과
그림 ‎19 2 중첩 루프 실행 결과

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

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

이처럼 중첩 루프는 2차원 평면을 다룰 수 있으므로 이미지 처리, 영상 처리, 좌표계 처리 등에 주로 쓰입니다.