2019년 10월 31일 목요일

파이썬으로 다이아몬드, 피라미드 그리기



파이썬에서 다이아몬드 그리는 법을 알아보자.

그 전에 우선 피라미드 그리는 법부터 알아야 한다.


최종 출력물
피라미드의 크기(숫자) 입력하세요 : 10
          *
         ***
        *****
       *******
      *********
     ***********
    *************
   ***************
  *****************
 *******************


위 그림을 그리기 위해선 3개의 변수가 필요하다
피라미드의 높이 n값
공백의 개수, 그리고 *의 개수

n을 3으로 최소화해서 규칙을 살펴보자.

피라미드의 크기(숫자) 입력하세요 : 3
   *
  ***
 *****

n=3 
공백
round 1
2
1
round 2
1
3
round 3
0
5

즉, 공백은 1씩 감소하는 수열이고
별은 1부터 시작해서 +2씩 증가하는 수열이다.

둘다 등차수열이다.

이를 for문을 써서 n과 i를 활용해서 공식으로 나타낸다면 아래와 같을 것이다.


i = 1부터 3까지 반복
- 공백 : 2 = 3-1 = n-i
- 별 : 1 = 2*(3-2) -1 = 2*(n-i-1) - 1

위 공식으로 어떠한 n에 대해서도 피라미드를 그려낼 수 있게 되었다.


따라서 최종 코드는 아래와 같게 된다.

# -*- coding: cp949 -*-
n = int(input("피라미드의 크기(숫자) 입력하세요 : "))
for i in range(1, n+1):
    print " "* (n-i), "*" * (2*i-1)



위 구조만 이해하면 마름모는 매우 쉽다.
피라미드를 거꾸로 눕혀주기만 하면 되기 때문이다.


마름모의 크기(숫자) 입력하세요 : 10
          *
         ***
        *****
       *******
      *********
     ***********
    *************
   ***************
  *****************
 *******************
  *****************
   ***************
    *************
     ***********
      *********
       *******
        *****
         ***
          *


단 주의할 점은
Loop가 n-1부터 0까지여야 한다는 것이다.

이유는 그려보면 알것이다.

# -*- coding: cp949 -*-
n = int(input("마름모의 크기(숫자) 입력하세요 : "))
for i in range(1, n+1):
    print " "* (n-i), "*" * (2*i-1)
for j in range(n-1, 0, -1) :
    print " "* (n-j), "*" * (2*j-1)

댓글 없음:

댓글 쓰기