-
[Python] Tree demo코딩/Python 2022. 12. 22. 14:17728x90
재귀함수와 `name == 'main' 최상위 코드 환경 예제
#!/usr/bin/env python3 """ turtle-example-suite: tdemo_tree.py 고전적인 LOGO 트리 프로그램에 대비한 '너비 우선 트리'를 표시 방법: (1) 제너레이터가 그림을 그리는데, 그 그림은 어떤 의미에서는 부작용으로 이해될 수 있다. 왜냐 하면 제너레이터는 항상 None을 생성하기 때문이다.(의역, 문장을 이해하기 힘들었음) (2) 터틀 복제: 각각의 가지치는 점에서 현재 펜을 복제. 최종적으로 1024개의 터틀이 생성됨. """ from turtle import Turtle, mainloop from time import perf_counter as clock def tree(plist, l, a, f): # tree() 함수 정의 """ plist is list of pens l is length of branch; 가지 길이 a is half of the angle between; 2 branches 두 가지 사이 각도/2 f is factor by which branch is shortened; 가지가 줄어드는 비례치 from level to level.""" if l > 3: lst = [] for p in plist: p.forward(l) # move forward for distance l q = p.clone() # p와 같은 pen 복제 p.left(a) # p는 왼쪽으로 a 회전 q.right(a) # q는 우측으로 a 회전(좌우 대칭) lst.append(p) # lst[]에 p 추가 lst.append(q) # list[]에 q 추가 for x in tree(lst, l*f, a, f): # 재귀함수. l이 3보다 작아질 때까지 계속 yield None # generator, None def maketree(): # maketree() 함수 정의 p = Turtle() # Turtle 클래스 오브젝트 생성 p.setundobuffer(None) # 실행취소 버퍼 비활성화 p.hideturtle() # 거북이 숨기기 p.speed(0) # 가장 빠르게 움직이기; 선 그려지는 것이 보이지 않게 한다 p.getscreen().tracer(30,0) # 거북이가 그리는 TurtleScreen 객체를 30번마다 갱신. 지연시간 0 p.left(90) # 90도 회전 p.penup() # 펜 들어올림 p.forward(-210) # -210만큼 전진 p.pendown() # 펜 내림 t = tree([p], 200, 65, 0.6375) # tree() 함수 실행; 펜 리스트 [p], 길이 200, 각도 65, 비례치 0.6375 for x in t: # t 반복 pass def main(): # main() 함수 a=clock() # 실행 시작 전 시간 a maketree() # maketree() 실행 b=clock() # 실행 후 시간 b return "done: %.2f sec." % (b-a) # 총 실행시간 반환 if __name__ == "__main__": # 최상위레벨 코드 환경 msg = main() # main 실행 print(msg) # main 실행 후 반환된 시간 mainloop() # 모든 것을 화면에 뿌린 후 사용자의 입력 대기 # 클릭하면 종료
728x90'코딩 > Python' 카테고리의 다른 글
[Python/Web scraping] 네이버 증권 일별 시세 가져오기, iframe의 requests와 selenium webdriver에서의 처리 (0) 2023.03.30 Python/사용자 정의 함수의 툴팁 작성 (0) 2023.03.29 [Python/Module] RegEx (1) 2022.12.22 [Python/Module] JSON (0) 2022.12.22 [Python tutorial] 28. Reference (0) 2022.12.21