[ turtle 라이브러리로 python을 정리 해보자! ]
- forward() 함수를 통해 지정한 만큼 앞으로 전진
- right() 함수와 left() 함수를 통해 지정한 각도만큼 회전한다
import turtle as t
t.shape("turtle")
t.forward(50)
# 50 픽셀만큼 앞으로 감
t.right(90)
# 90도만큼 오른쪽으로 회전한다.
t.forward(50)
- circle() 함수를 통해서 원을 그릴 수 있다.
import turtle as t
# 삼각형 그리기
t.forward(d)
t.left(120)
t.forward(d)
t.left(120)
t.forward(d)
t.left(120)
# 사각형 그리기
t.forward(d)
t.left(90)
t.forward(d)
t.left(90)
t.forward(d)
t.left(90)
t.forward(d)
t.left(90)
# 원 그리기
t.circle(50)
# 반지름이 50인 원을 그린다.
- color() 함수를 통해서 선의 색상을 지정할 수 있다.
- pensize() 함수를 통해서 선의 굵기를 지정할 수 있다.
import turtle as t
# 선의 색상과 굵기를 지정할 수 있다.
# 삼각형 그리기
t.color('red')
t.forward(d)
t.left(120)
t.forward(d)
t.left(120)
t.forward(d)
t.left(120)
# 사각형 그리기
t.color('green')
t.pensize(3)
t.forward(d)
t.left(90)
t.forward(d)
t.left(90)
t.forward(d)
t.left(90)
t.forward(d)
t.left(90)
# 원 그리기
t.color("blue")
t.pensize(5)
t.circle(50)
# 반지름이 50인 원을 그린다.
- 숫자 뿐만 아니라 변수를 지정해서 변수를 통해 함수를 호출하는 것도 가능하다.
import turtle as t
d = 100
t.forward(d)
t.left(120)
t.forward(d)
t.left(120)
t.forward(d)
t.left(120)
- 또한, 제어문이나 반복문의 안에 함수를 호출하는 코드를 구현할 수 있다.
import turtle as t
d = 100
# 삼각형 그리기
t.color('red')
t.shape('turtle')
for i in range(3) :
t.forward(d)
t.left(120)
# 사각형 그리기
t.color('green')
t.pensize(3)
for i in range(4) :
t.forward(d)
t.left(90)
# 원 그리기
t.color("blue")
t.pensize(5)
t.circle(50)
- begin_fill() 함수와 end_fill() 함수를 통해서 색칠할 수 있다.
- 단, begin_fill() 함수와 end_fill()함수는 같이 사용해주어야 한다. begin_fill()부터 시작해서 end_fill()까지 색칠을 진행한다.
import turtle as t
n=5
t.shape('turtle')
t.color('purple')
t.begin_fill() # 색칠을 시작
for x in range(n):
t.forward(50)
t.left(360/5)
t.end_fill() # 색칠을 끝냄(begin_fill이랑 end_fill이랑 세트)
- speed() 함수를 통해서 거북이의 속도를 지정할 수 있다.
import turtle as t
n=50
t.bgcolor("black")
t.color("green")
t.speed(0) # 0이 가장 빠른 속도
for x in range(n):
t.circle(80)
t.left(360/n)
※ input함수 내에 따옴표를 안주면 입력창이 어디인지 모른다. input("내용") 의 코드에서 내용을 써주는 것은 입력창을 눈으로 쉽게 식별할 수 있게 해주려고 넣은 것이다. ※
[ time 라이브러리 ]
- 시간을 측정하기 위해서 time 라이브러리를 import해온다
import time
input("엔터를 누르고 20초를 셉니다")
start = time.time()
input("20초 후에 다시 엔터를 누릅니다.")
end = time.time()
et = end - start
print("실제 시간 : ", et, "초")
print("차이 : ", abs(et-20), "초")
- 깔끔하게 정리되어 있는 코드를 보면, 1행부터 순서대로 구현을 진행한 것 같지만 사실은 아니다. 구현을 한 뒤 보기 쉽게 깔끔하게 정리해 놓은 것들임!!
*** 코딩하는 순서대로 한번 적어보자 ***
import turtle as t
t.shape("turtle")
t.speed(0)
import random
for x in range(500):
a = random.randint(1,360)
t.setheading(a)
t.forward(10)
# 코딩하는 순서대로 적은 코드
: 위의 코드 블럭에 코드가 정확하게 잘 작동이 되면 이제 코드를 정리해준다.
import turtle as t
import random
t.shape("turtle")
t.speed(0)
for x in range(500):
a = random.randint(1,360)
t.setheading(a)
t.forward(10)
: 나중에 어느정도 다 짜놓고 정상작동을 하는지 확인한 후 코드를 정리해주는 것이 더 좋다. (쓸데없는 메모리를 차지하지 않도록) 순서대로 코드를 짜는 것이 아니라 일단 짜고나서 내가 확인하기 쉽게 정리하자!
※ 코딩을 할 때 행이 많아지면 나중에 무슨 코딩을 한건지 알아보는 것이 힘들다. 그럴때는 코딩하는 중간중간 무슨 코드인지 주석을 달아서 구분해보자! 예를들면 사용자 정의 함수 옆에 이 함수의 기능이 무엇인지 달아주는 것이 구분하기 쉽다 ※
[ turtle 라이브러리로 다시 돌아와서 개념을 다시 복습하자 ]
- 키보드로 거북이를 조정해서 그림을 그려보자
- onkeypress(함수, '키이름') 함수는 키보드를 눌렀을 때 실행할 함수를 정한다.
- setheading(각도) 함수는 거북이가 바라보는 방향을 바꾼다.
import turtle as t
def turn_right():
t.setheading(0)
t.forward(10)
def turn_up():
t.setheading(90)
t.forward(10)
def turn_left():
t.setheading(180)
t.forward(10)
def turn_down():
t.setheading(270)
t.forward(10)
def blank():
t.clear
t.shape("turtle")
t.speed(0)
t.onkeypress(turn_right, "Right")
t.onkeypress(turn_up, "Up")
t.onkeypress(turn_left, "Left")
t.onkeypress(turn_down, "Down")
t.onkeypress(blank, "Escape")
t.listen()
[ 거북이 대포 게임 ]
# 거북이 대포게임
import turtle as t
import random
# 사용자 지정 함수
def turn_up():
t.left(2)
def turn_down():
t.right(2)
def fire():
ang = t.heading()
while t.ycor() > 0:
t.forward(15)
t.right(5)
d = t.distance(target,0)
t.sety(random.randint(10,100))
if d <25 :
t.color("blue")
t.write("Good!", False, "center", ("", 15))
else:
t.color("red")
t.write("Bad!", False, "center", ("", 15))
t.color("black")
t.goto(-200,10)
t.setheading(ang)
# 일단 먼저 기준이 되는 땅 위치를 그려보자.
t.goto(-300, 0)
t.down()
t.goto(300,0)
# 목표지점을 설정하자
target = random.randint(50,150)
t.pensize(3)
t.color("green")
t.up()
t.goto(target-25, 2) # target-25 : 경험에 의해서 나온 숫자임. 계속 조절하면서 각도를 맞추다가 적당한 숫자가 25였다는 것.
t.down()
t.goto(target+25, 2) # target+25 : 경험에 의해서 나온 숫자임. 계속 조절하면서 각도를 맞추다가 적당한 숫자가 25였다는 것.
# 거북이 색 검은색 지정, 처음 발사 되돌림 코드
t.color("black")
t.up()
t.goto(-200, 10)
t.setheading(20)
t.onkeypress(turn_up, "Up")
t.onkeypress(turn_down, "Down")
t.onkeypress(fire, "space")
t.listen()
t.mainloop()
: 이 경우 교재에서는 맨 마지막 행의 코드인 t.mainloop()의 코드가 없었다. 그때문에 윈도우 창이 바로 없어져 게임을 실행하지 못했다. t.mainloop() 함수는 사용자가 그래픽 창을 종료할 때까지 프로그램을 실행하면서 마우스나 키보드 입력을 계속 처리하도록 하는 함수이다. t.mainloop() 함수를 통해 윈도우 창이 꺼지지 않도록 설정해주는 것이 필요했다.
'대외활동 > ABC 지역주도형 청년 취업역량강화 ESG 지원산업' 카테고리의 다른 글
[ABC 220829- 10일차] 웹 기초 (0) | 2022.08.30 |
---|---|
[220824 ABC - 7일차] PYTHON 라이브러리 (0) | 2022.08.25 |
[220823 ABC - 6일차] PYTHON 라이브러리 (0) | 2022.08.25 |
[220823 ABC - 6일차] PYTHON 기초 (0) | 2022.08.25 |
ABC 프로젝트 준비 (220823 조사 시작) (0) | 2022.08.23 |