본문 바로가기

Programming/#Python

[Python] 함수를 사용한 로봇 조종 및 디지털 사진 변환 프로그램

목표
  1. 함수를 사용하여 휴보 로봇이 비퍼들을 줍는 프로그램을 모듈러하게 작성하기 
  2. 함수를 사용하여 색의 밝기 측정 및 디지털 사진을 흑백 모드로 변환하기 

 

Hubo와 Ami

휴보만 사용할 수 있었던 turn_right() 함수를 인자를 이용해 모든 로봇이 사용할 수 있도록 함

def turn_right(robot):
	for i in range(3):
    	robot.turn_left()
        
ami = Robot("yellow")
hubo = Robot("blue")
turn_right(ami)
turn_right(hubo) 

#매개변수는 함수 내부에서만 사용 가능
#함수 밖에서 사용 시 없는 함수로 오류가 뜸

 

 

함수를 이용한 비퍼 줍기

마름모꼴 외곽의 비퍼를 줍는 휴보

 

첫 번째 가장 큰 마름모꼴 비퍼를 줍는 알고리즘을 세우면 전체 문제를 해결할 수 있음

top-down 형식으로 과제를 작게 잘라서 하나씩 해결하는 디자인으로 프로그램 설계

In [1]: def harvest_all(robot):
   ...:     for i in range(3): #3겹의 작업을 수행하기 위해
   ...:         n = 5 - 2 * i
   ...:         diamond(robot, n) #한 변의 길이가 n인 다이아몬드 모양으로 robot을 움직이면서 비퍼를 주움
   ...:         robot.move()
   ...:         robot.move()

In [2]: def diamond(robot, n):
   ...:     for i in range(4): #마름모의 4변에 대한 작업을 수행하기 위해
   ...:         stairs(robot, n)
   ...:         robot.turn_left() 
   #각각의 모서리에서 hubo가 바라보고 있는 방향이 달라짐
   #stair function을 사용해서 서로 다른 방향의 비퍼를 먹을 수 있음

In [3]: def stairs(robot, n):
   ...:     for i in range(n): #주어진 n의 길이만큼 지그재그로 움직임 
   ...:         robot.pick_beeper()
   ...:         robot.move()
   ...:         turn_right(robot)
   ...:         robot.move()
   ...:         robot.turn_left 

☞ 이렇듯 함수는 프로그램을 간결하게, 이해하기 쉽게 짜도록 함 

 

흑백으로 변환하기 

r, g, b로 표현되는 색의 밝기를 계산하는 함수 

빨강, 초록, 파랑 세 값의 튜플로 계산됨

색의 밝기(luma)를 계산하는 함수

def luma(p):
	r, g, b = p
    return int(0.213 * r + 0.715 * g + 0.072 * b)
    
#디지털 사진에서 각각의 픽셀의 밝기를 luma함수를 통해 구할 수 있음
white = (255, 255, 255)
black = (0, 0, 0)

def blackwhite(img, threshold): #임계점을 인자로 넘겨줌 
	w, h = img.size()
	for y in range(h):
		for x in range(w): #이미지의 가로, 세로 폭을 받음
			v = luma(img.get(x, y)) #각각의 픽셀에 대한 빛의 세기를 받음
			if v > threshold: 
				img.set(x, y, white) #하얀색 입히기
			else:
				img.set(x, y, black) #검정색 입히기 
                
pict = load_picture("../photos/yunal.jpg")
blackwhite(pict, 100)
pict.show()

 

정리하기 
  1. 함수를 사용하여 휴보 로봇이 비퍼들을 줍는 프로그램을 모듈러하게 작성하기
  2. 함수를 사용하여 탑다운 디자인 설계하기
  3. 함수를 사용하여 색의 밝기 측정 및 디지털 사진을 흑백 모드로 변환하기 

edwith, 파이썬으로 배우는 프로그래밍 기초, 김문주 교수

 

I'm a Senior Student in Data Science ! 

데이터 사이언스를 공부하고 있는 4학년 학부생의 TIL 블로그입니다. 게시글이 도움 되셨다면 구독과 좋아요 :)