6. 도형 그리기

solarrrrr·2021년 7월 20일
0

Python

목록 보기
6/9
post-thumbnail

import turtle 모듈을 이용해서
도형을 그려보는 학습 중이다.

사각형부터 겹쳐진 원 등등을 그려본 후
연습문제로 오각별 그리는 문제가 주어졌다.

연습문제: 오각별 그리기
다음 소스 코드를 완성하여 오각별이 그려지게 만드세요.

  • 각 변의 길이는 100
  • 별의 꼭지점은 72도를 두 번 회전해서 144도 회전
  • 별의 다음 꼭지점을 그릴 때는 72도 회전

언제나처럼 답지를 보지 않고 그려보았다.

import turtle as t

t.shape('turtle')
t.speed('normal')

for i in range(10):
    t.rt(72)
    t.fd(100)
    t.rt(144)
    t.fd(100)
t.mainloop()

이게 아닌데 -_-;
슈퍼그랑죠가 되어버렸다. (나와라, 번개전사 그랑죠!)

뭐가 잘못됐는지 머릿속으로 그려보는데
잘 안 된다.

각도가 잘 안 그려지고
거북이의 진행 방향이 잘 그려지지 않는다.

개발자적인, 논리적인 사고가 안 되는 게 이런 건가?
코드를 머리로 실행해 보는 게 잘 안 된다.

경험이 부족해서인지 재능이 없어서인지
그냥 단순히 머리가 나빠서인지 모르겠지만

일단 머리로는 잘 그려지질 않아서
드로잉 속도를 낮추고 방향값을 조절해가며
각도나 진행 방향을 살펴보았다.

그렇게 해서야 완성했다.

import turtle as t

t.shape('turtle')
t.speed('slow')

for i in range(5):
    t.fd(100)
    t.rt(144)
    t.fd(100)
    t.rt(-72)
    
t.mainloop()

그런데 드로잉 부분인 반복문의 코드가 너무 지저분하다.
노가다성이 짙어 보이는 것이
아무래도 정답이 아닌 거 같았다.

다같이 협업하는 개발에서는
간결한 코드가 중요하지만
무조건 짧은 코드가 좋은 코드는 아니라고 했다.

나만 알아볼 수 있는 코드가 아니라
누가 봐도 이해할 수 있는 간결한 코드가
좋은 코드라고 배웠다.

그렇게 보자면 위 소스는 알아보긴 쉬울 거 같지만
뭔가 간결함과는 거리가 있어 보여서
거리를 좁혀보기로 했다.
...
...
...

그런데 방법이 떠오르질 않았다.
각이 144도로 한 번,
반대 방향 72도로 두 번 꺾여야 하는데
이걸 어찌 간결하게 한두 줄로 처리해야 할지
감이 오지 않았다.

안 되는 거 아닌가 싶어 한참 고민하다 답지를 봤는데
정답은 아래와 같았다.

import turtle as t
 
n = 5
t.shape('turtle')
for i in range(n):
    t.forward(100)
    t.right((360 / n) * 2)
    t.forward(100)
    t.left(360 / n)

반복할 값을 미리 변수 n로 할당했고
반복문 처리 부분은 역시 줄여지지 않았다.
(당연한 것인가..)

각도 조절 부분이 각도 자체를 적은 나와는 달리
수식으로 되어 있었다.

다만 방향 전환 부분 중에
나는 -72라는 음수를 써서 방향을 전환했는데
답지는 t.left를 써서 양수로 전환한 차이 정도가 있었다.

그러고 보니 나는 모로 가도 한양은 가도록 풀었지만
문제에서 제시한 방향과는 틀리게 푼 것 같다.

문제에서는 마이너스가 아닌 양수 75도라는
제시만 되어 있었기 때문에
t.left를 사용해 보라는 것이 의도이지 않을까 생각된다.

상대가 의도한 바를 깨닫고 정석적으로 개발하는 실력,
정석 아닌 신박한 길을 찾아 개척하는 개발 실력,

그 모두를 갖추고 싶다.

profile
몰입

0개의 댓글