거북이로 간단하게 그리기

소개

Turtle은 그림판이랑 비슷합니다.

거북이를 움직일 수 있는 ``turtle.forward(...)``와 ``turtle.left(...)``같은 함수가 있어요.

Before you can use turtle, you have to import it. We recommend playing around with it in the interactive interpreter first, as there is an extra bit of work required to make it work from files. Just go to your terminal and type:

import turtle
_images/default.png

주석

Mac OS에서 아무것도 안보인다구요? turtle.forward(0) 같은 명령을 실행해서 명령행 뒤에 새 창이 열렸는지 확인해보세요.

주석

우분투에서 실행할 때 “No module named _tkinter” 오류 메시지가 나온다구요? ``sudo apt-get install python3-tk``로 빠진 꾸러미를 설치하세요.

주석

이 페이지에 적힌 코드를 임시 방편으로 복사해서 붙여넣기보단 각각의 명령을 직접 쳐보세요. 직접 쳤을때 문법도 익히고(근육의 움직임 기억을 만들어요!) 이상한 문법 오류를 막는데도 도움이 돼요.

turtle.forward(25)
_images/forward.png
turtle.left(30)
_images/left.png

turtle.forward(...) 함수는 거북이에게 주어진 거리만큼 움직이라고 알려줘요. turtle.left(...) 함수는 왼쪽 방향으로 주어진 각도만큼 돌으라고 하구요. ``turtle.backward(...)``랑 ``turtle.right(...)``도 있어요.

주석

깔끔하게 시작하겠다구요? ``거북이``가 이제껏 그린 내용을 지우려 한다면 ``turtle.reset()``를 칠 수 있어요. 이제 ``turtle.reset()``에 대해 좀 더 자세히 이야기해보려고 해요.

표준 거북이 모양은 그냥 삼각형입니다. 참 재미없게 생겼죠. turtle.shape() 명령으로 대신 거북이를 만들어보도록 하겠어요:

turtle.shape("turtle")

더욱 귀여워졌죠?!

파일에 명령을 넣으면 거북이가 이동한 후 거북이 창이 사라진 모습을 보게 돼요(왜냐면 거북이를 다 옮기고 나면 파이선에서 빠져나가기 때문이거든요. 거북이 창은 파이선이 붙들고 있기 때문에 같이 끝나요). 이걸 막으려면 파일 아래에 ``turtle.exitonclick()``를 추가하세요. 그러면 창을 누르기 전에는 열린 상태로 그대로 두게 돼요:

import turtle

turtle.shape("turtle")

turtle.forward(25)

turtle.exitonclick()

주석

파이썬은 수평 들여쓰기가 중요한 프로그래밍 언어예요. 다음 장에서 함수에 대해 배우겠지만, 지금은 그냥 파이썬 코드 앞부분에 공백 문자나 탭을 빼먹으면 갑작스런 오류가 있을 수 있다는 사실을 기억해두세요.

사각형 그리기

주석

언제든 답을 바로 알려고 하진 않을거예요. 그냥 해보고 오류를 일으키면서 배우세요! 여러가지를 호출하면서 파이선이 어떤 동작을 하는지, (가끔은 기대하지 못했더라도)어떤 결과가 보기 좋은지, 어떤 경우에 오류가 나타나는지 경험하세요. 재밌는 결과를 만드는걸 배워서 즐기려고 한다면, 괜찮아요. 배울때 해보고 실패하는걸 망설이지 마세요!

연습

다음 그림에 사각형을 그리세요:

_images/square.png

사각형을 그리려면 90도 직각 회전이 필요할 수도 있어요.

해결책

turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.left(90)

주석

거북이가 사각형을 그리기 전후에 같은 장소에서 어떻게 움직임을 시작하고 끝내는지, 같은 방향을 어떻게 바라보는지 살펴보세요. 따라하는데 쓸모있는 표기방식이고 나중에 여러가지 도형을 그릴때 쉽게 그릴 수 있도록 도와줘요.

If you want to get creative, you can modify your shape with the turtle.width(...) and turtle.color(...) functions. How do you use these functions? Before you can use a function you need to know its signature (for example the number of parameters and what they mean.) To find this out you can type help(turtle.color) into the Python shell. If there is a lot of text, Python will put the help text into a pager, which lets you page up and down. Press the q key to exit the pager.

참고

다음 같은 오류를 보고 있나요:

NameError: name 'turtle' is not defined

when trying to view help? In Python you have to import names before you can refer to them, so in a new Python interactive shell you’ll need to import turtle before help(turtle.color) will work.

Another way to find out about functions is to browse the online documentation.

조심

If you misdrew anything, you can tell turtle to erase its drawing board with the turtle.reset() directive or undo the most recent step with turtle.undo().

참고

As you might have read in the help, you can modify the color with turtle.color(colorstring). These include but are not limited to “red,” “green,” and “violet.” See the colours manual for an extensive list.

사각형을 그려보아요

연습

사각형도 그릴 수 있어요 ???

_images/rectangle.png

해결책

turtle.forward(100)
turtle.left(90)
turtle.forward(50)
turtle.left(90)
turtle.forward(100)
turtle.left(90)
turtle.forward(50)
turtle.left(90)

삼각형은 어떤가요? 정삼각형(각 변의 길이가 같은 삼각형)의 세 귀퉁이는 60도 각을 가져요.

더 많은 사각형

연습

이제 바둑판처럼 배치한 사각현을 그려보기로 하겠어요. 그리고 다른거, 또 다른거. 각각의 사각형 사이에 각을 주는 경험도 할 수 있어요.

_images/tiltedsquares.png

The picture shows three 20 degree turns. You could try 20, 30 and 40, for example.

해결책

turtle.left(20)

turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.left(90)

turtle.left(30)

turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.left(90)

turtle.left(40)

turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.left(90)