일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- object
- 함수
- developerlife
- ES5+
- learn next.js
- 우아한테코톡
- hooks
- This
- html5
- dev
- gitCLI
- array
- API
- JS
- 선택자
- 햇소
- github
- ES6+
- react
- hatso
- next.js
- Python
- git
- DOM
- JavaScript
- AI
- es6
- 변수
- 최적화
- CSS
Archives
- Today
- Total
codinghatso
AI Beginner 거북이 길찾기 with.python 본문
python 에서 제공하는 turtle 라이브러리를 사용하여 랜덤으로 목적지를 지정하여 그곳을 찾아가는 AI를 만들어 보았습니다.
탐색한 횟수를 기록하여 성능을 체크하였습니다.
from turtle import *
import random
#%% target 난수 생성
targetX = (random.randint(-10, 10)) * 10
targetY = (random.randint(-10, 10)) * 10
mypen=Turtle()
#%% 울타리 그리기
mypen.penup()
mypen.pencolor("black")
mypen.setposition(-100,-100)
mypen.pendown()
for x in range(4):
mypen.forward(200)
mypen.left(90)
#%% 출발 지점 표시
mypen.penup()
mypen.pen(pencolor="blue", pensize=10)
mypen.setpos(0,0)
mypen.pendown()
mypen.setpos(0,0)
#%% 목표 지점 표시
mypen.penup()
mypen.pen(pencolor="red", pensize=10)
mypen.setpos(targetX,targetY)
mypen.pendown()
mypen.setpos(targetX,targetY)
#%% 거북이 설정
mypen.penup()
mypen.pen(pencolor="black", pensize=1)
mypen.setpos(0,0)
mypen.speed(10)
mypen.shape("turtle")
mypen.pendown()
print("시작점 : ",mypen.pos())
print("목표 : " + "[" + str(targetX) + "," + str(targetY) + "]")
#%% 거북이 움직임 기록
number=0
while True:
posX = round(mypen.xcor())
posY = round(mypen.ycor())
if posX == targetX and posY == targetY:
print("총"+str(number)+"의 움직임 발생")
break
number += 1
rand = random.randint(0, 3)
if(rand==0):
rotate = 0
elif(rand==1):
rotate = 90
elif(rand==2):
rotate = 180
else:
rotate = 270
mypen.seth(rotate)
#%% 울타리 범위 벋어나지 못하게 한다.
if(posX >= 100 and mypen.heading()==0): #동쪽
continue
elif(posY <= -100 and mypen.heading()==270): #남쪽
continue
elif(posX <= -100 and mypen.heading()==180): #북쪽
continue
elif(posY >= 100 and mypen.heading()==90): #서쪽
continue
else:
mypen.forward(10)
AI라고 불릴 수준은 아니지만 스스로 탐색하는 유사 AI를 만들어 보았던것 같습니다.
turtle 라이브러리를 사용하면서 인상깊었던 것은 pen()
의 사용법이었습니다.
사용자가 그림을 그리는 듯한 경험을 주는 알고리즘 구조가 이해도 잘되고 재미도 있었습니다.
Comments