[프로그램 1]을 수정해 X+Y 좌표가 가장 작은 거북이부터 정렬한 수 거북이끼리 선을 긋는다. 예를 들어 (10, 10), (-100, -50), (50, 10) 세 좌표의 거북이를 X+Y값으로 정렬하면 (-100, -50), (10, 10), (50, 10)이 되는데, 이 세 거북이를 선으로 이으면 된다. 다음 결과는 거북이 10마리를 좌표로 정렬한 후 선을 그은 결과아다.
힌트 : 각 거북이 리스트의 두번째 값인 X좌표와 세번째 값인 Y좌표를 더한 결과를 playerTurtles를 오름차순 정렬해야 한다.
힌트 : 시작 거북이는 정렬 후 가장 첫 번째 거북이로 해야 한다.
힌트 : 거북이 사이에 선을 그으려면 앞 거북이의 좌표를 저장해고 있어야 한다.
소스코드
import turtle
import random
## 전역변수 선언 부분 ##
myTurtle, tX, tY, tColor, tSize, tShape, tSum = [None] * 7 # tSum = X좌표와 Y좌표의 합
playerTurtles = []
swidth, sheight = 500, 500
## 메인 함수 부분 ##
if __name__ == "__main__" :
turtle.title('거북이 리스트 활용(정렬)')
turtle.setup(width = swidth + 50, height = sheight + 50)
turtle.screensize(swidth, sheight)
## 랜덤으로 거북이 객체 10개를 생성 후 playerTurtles에 넣기 ##
for i in range(0, 10) :
myTurtle = turtle.Turtle('turtle')
tX = random.randrange(-swidth / 2, swidth / 2)
tY = random.randrange(-sheight / 2, sheight / 2)
r = random.random(); g = random.random(); b = random.random()
tSize = random.randrange(1, 3)
tSum = tX + tY
playerTurtles.append([myTurtle, tX, tY, tSize, r, g, b, tSum])
## tSum을 key로 오름차순 정렬
soredTurtles = sorted(playerTurtles, key=lambda turtles : turtles[7] ,reverse = True)
for index, tList in enumerate(soredTurtles[0:]) : # enumerate는 index 값을 같이 반환해 줌 (튜플 형태)
myTurtle = tList[0]
myTurtle.color((tList[4], tList[5], tList[6]))
myTurtle.pencolor((tList[4], tList[5], tList[6]))
myTurtle.turtlesize(tList[3])
myTurtle.penup()
if index == 0 : # 첫 번째 거북이는 해당 위치로 이동
myTurtle.goto(tList[1], tList[2])
continue
myTurtle.goto(soredTurtles[index-1][1], soredTurtles[index-1][2]) # 이전 거북이 위치로 이동
myTurtle.pendown()
myTurtle.goto(tList[1], tList[2]) # 거북이의 좌표로 선 긋기
turtle.done()
'프로그램언어 > 파이썬' 카테고리의 다른 글
거북이 원 모양으로 글자쓰기 (0) | 2020.06.03 |
---|---|
거북이 글자쓰기 (0) | 2020.06.03 |
거북이 리스트 활용 (0) | 2020.06.03 |
거북이로 구구단 출력하기 (0) | 2020.06.03 |
거북이 소라 모양 그리기 (0) | 2020.06.02 |