반응형
SMALL
야근 때문에 한동안 학습을 못하다가
오랜만에 다시 파이썬(Python)학습 시작!
오늘의 주제는 순환(Recursion)호출입니다
순환(Recursion)호출은 함수 내부에서 자기 자신을 다시 호출하는 구조를 말합니다
이를 이용해서 일부가 전체와 비슷한 형태로 무한히 되풀이되는 기하학적인 형태인
Fractal 혹은 자기 유사성(Self-similarity) 프로그램을 작성해보겠습니다
Fractal은 Mandelbrot라는 분이 처음으로 쓴 단어로
해안선이나 나뭇가지와 같은 자연물, 수학적인 분석, 운동 모형에서 많이 발견된다고 합니다
import turtle
def tree(length):
if length > 5: #length가 5보다 크면 순환호출을 한다
t.forward(length) #거북이가 length만큼 선을 그린다
t.right(20) #오른쪽으로 20도 회전한다
tree(length-15) #순환호출
t.left(40) #왼쪽으로 40도 회전한다
tree(length-15) #순환호출
t.right(20) #오른쪽으로 20도 회전한다
t.backward(length) #length만큼 뒤로 간다
t = turtle.Turtle()
t.left(90) #거북이가 북쪽으로 바라보게 한다
t.color("blue")
t.speed(1)
tree(90)
이 프로그램을 실행시켜보면
우선 ① 길이 90짜리 직선을 하나 그리고
각도를 오른쪽으로 20도 돌려서 자기 자신 호출
그러다 ② 5보다 작아지면 더이상 직선이 그려지지 않고
왼쪽으로 40도를 돌린다(가운데 기준으로 왼쪽 20도)
그리고 나서 ③ 자기 자신 호출(이때는 이미 5보다 작으므로 그려지지 않는다)
마지막으로 ④ 각도를 다시 가운데로 돌리고 직선을 그린 만큼 되돌아간다
이 과정을 반복하면서 나무를 그리게됩니다
(직접 동작해보시면 아시겠지만, 혹시 이해 안되시면 코드를 따라 그림을 그려보세요)
추가로 위에서 사용한 turtle graphic의 기능을 알아보겠습니다
함수 | 인수 | 설명 |
forward() | 픽셀(pixel)값 | 거북이를 지정된 거리만큼 앞으로 이동한다 |
backward() | 픽셀(pixel)값 | 거북이를 지정된 거리만큼 뒤로 이동한다 |
right() | 각도 | 거북이를 오른쪽으로 회전시킨다 |
left() | 각도 | 거북이를 왼쪽으로 회전시킨다 |
up(), penup() | None | 그림이 그려지지 않는다 |
down(), pendown() | None | 그림이 그려진다 |
color() | 색상 | 색상을 변경한다 |
fillcolor() | 색상 | 채우기 색상을 변경한다 |
heading() | None | 현재의 방향을 반환한다 |
position() | None | 현재의 위치를 반환한다 |
goto() | 좌표(x,y) | 거북이를 (x,y)로 이동시킨다 |
begin_fill() | None | 채워진 다각형을 시작한다 |
end_fill() | None | 채워진 다각형을 닫는다 |
dot() | None | 현재 위치에 점을 찍는다 |
stamp() | None | 현재 위치에 거북이 모양을 남긴다 |
shape() | 모양 | 거북이의 모양을 'arrow', 'classic', 'turtle', 'circle' 중의 하나로 변경한다 |
오늘의 학습은 이만-_-
반응형
LIST
'Python' 카테고리의 다른 글
[Python] 간단한 메모장 만들기 (0) | 2019.09.05 |
---|---|
[Python] Tk Interface(tkinter) 알아보기_1 (0) | 2019.09.04 |
[Python] 함수(Function)를 이용한 간단한 로또(Lotto)추첨 프로그램 (0) | 2019.08.27 |
[Python] 문자열 알아보기 (0) | 2019.08.27 |
[Python] LIFO(Last In First Out) 주차장(Parking lot) 구현하기 (0) | 2019.08.21 |