needmoreeasy EN 한국어
배우기

63 — 아스키 아트 — 문자로 그리기

★★★★★ (5/5)출력/루프
선수 지식
05 — 반복, 47 — 진행
결과물
중첩 반복과 문자열 곱셈으로 직각 삼각형, 거꾸로 삼각형, 마름모를 그리는 프로그램

47 가이드는 한 줄이 자라나는 # 행을 그렸습니다. 여기서는 행이 모양을 유지하므로 그림이 나타납니다 — *와 공백으로 만든 도형입니다. 두 가지 도구가 일을 합니다. 문자열 곱셈은 문자를 반복하고, 반복은 한 줄을 반복합니다. 중첩 반복이 그 줄들을 삼각형과 마름모로 만듭니다.

단계

  1. "*" * 5는 별 다섯 개짜리 문자열 하나이고, " " * 2 + "*" * 3은 공백 두 개에 별 세 개를 붙입니다. 문자열도 숫자처럼 곱하고 더할 수 있습니다:

    말해 "*" * 5
    말해 " " * 2 + "*" * 3
    
    실행해 보기 →

    ***** 다음에 ***(공백 두 개, 별 세 개)이 출력됩니다.

  2. for 반복이 반복된 문자열을 삼각형으로 만듭니다. 매 패스가 한 줄을 출력하고, 줄은 i에 따라 자라납니다:

    for i in range(1, 6):
        말해 "*" * i
    
    실행해 보기 →

    별 하나에서 다섯 개까지의 직각 삼각형이 출력됩니다.

  3. range(5, 0, -1)은 거꾸로 셉니다. 그래서 줄이 줄어듭니다. 같은 반복 몸통이 거꾸로 된 삼각형을 그립니다:

    for i in range(5, 0, -1):
        말해 "*" * i
    
    실행해 보기 →

    별 다섯 개에서 하나까지 출력됩니다.

  4. 가운데 정렬된 줄에는 왼쪽에 공백이 필요합니다. 다섯 줄 도형의 i번째 줄에는 n - i개의 공백이 별을 가운데로 밀고, 2 * i - 1개의 별은 1, 3, 5... 처럼 홀수 개입니다:

    n = 5
    for i in range(1, n + 1):
        공백 = " " * (n - i)
        별 = "*" * (2 * i - 1)
        말해 공백 + 별
    
    실행해 보기 →

    뾰족한 마름모 윗부분이 출력됩니다.

  5. 이제 전체 그림을 한 프로그램에 담습니다. 마름모는 가운데 정렬된 줄을 두 번 씁니다 — 위쪽은 위로 세고, 아래쪽은 거꾸로 셉니다. ascii.ko.nme로 저장합니다:

    # ascii.ko.nme — 문자로 도형 그리기
    # 실행: nme 실행 ascii.ko
    #
    # 도형은 두 가지 아이디어로 만듭니다. 문자열 곱셈은 문자를
    # 반복하고, 중첩 반복은 줄을 반복합니다. 직각 삼각형,
    # 거꾸로 삼각형, 마름모를 그립니다.
    
    n = 5
    
    말해 "직각 삼각형:"
    for i in range(1, n + 1):
        말해 "*" * i
    
    말해 ""
    말해 "거꾸로 삼각형:"
    for i in range(n, 0, -1):
        말해 "*" * i
    
    말해 ""
    말해 "마름모:"
    for i in range(1, n + 1):
        공백 = " " * (n - i)
        별 = "*" * (2 * i - 1)
        말해 공백 + 별
    for i in range(n - 1, 0, -1):
        공백 = " " * (n - i)
        별 = "*" * (2 * i - 1)
        말해 공백 + 별
    
    실행해 보기 →
  6. 실행합니다:

    nme 실행 ascii.ko
    
    직각 삼각형:
    *
    **
    ***
    ****
    *****
    
    거꾸로 삼각형:
    *****
    ****
    ***
    **
    *
    
    마름모:
        *
       ***
      *****
     *******
    *********
     *******
      *****
       ***
        *
    

    마름모는 별 하나에서 시작해 아홉 개까지 넓어졌다가 하나로 좁아집니다. 아래쪽 반복이 n - 1에서 시작하므로 가장 넓은 줄이 두 번 출력되지 않습니다.

  7. 영어는 같은 단계를 show, spaces, stars로 씁니다. 전체 영어 프로그램은 영어 가이드에 있습니다.

직접 해보기

n을 5에서 8로 바꾸고 다시 실행해 보세요. 모든 도형이 커집니다. 그런 다음 문자 H를 만들어 보세요: 별 기둥 두 개에 가운데 n개의 별 줄을 넣고, if로 가운데 줄을 고르는 반복 하나로 만듭니다. "*""@"로 바꾸면 같은 도형이 다른 문자로 나옵니다.

배운 것

  • "*" * 5는 문자열을 반복하고, " " * 2 + "*" * 3은 가운데 정렬 줄을 만듭니다.
  • 반복이 한 줄을 반복하고, 반복 변수가 각 줄의 길이를 정합니다.
  • range(n, 0, -1)은 거꾸로 세어 줄을 줄여 줍니다.
  • 마름모는 가운데 정렬된 줄 하나를 위로 세고 다시 거꾸로 세는 것입니다.
  • 중첩 반복 — 각 줄의 모양을 정하는 반복 — 은 그림을 그립니다.

GitHub에서 이 문서 보기