6. 이벤트 신호와 약속 함수
【배우기】
1. 엔트리로 신호와 함수 이해하기
2. 파이선으로 신호와 함수 이해하기
1신호와 함수란 무엇일까요?
신호와 함수 중에선 신호에 대해서 먼저 알아보도록 하자. 신호란 무엇일까? 일상생활에서 자동차 신호등을 생각해본다면, 달리던 자동차는 신호등을 만나서 빨간불인 경우에는 차가 주행하지 못하고 차량 정지선에서 서 있게 된다. 그리고 다시 신호등이 초록색으로 바뀌면, 차는 다시 주행할 수 있다. 이처럼 어떠한 이벤트를 발생시키기 위해서 필요한 것이 신호라고 생각하면 된다. 따라서 엔트리에서의 신호는 각각의 오브젝트들이 서로에게 영향을 주는 것을 말하며, 파이선에서는 호출이 신호와 같은 역할을 한다. 따라서 신호는 서로가 서로에게 영향을 줄 수 있도록 만든 것이다.
다음은 함수에 대해서 알아보도록 하자. 함수란 무엇일까? 함수는 명령어들을 묶어 놓고, 이 묶음에 이름을 주는 것을 말한다. 예를 들어 과자종합선물 세트를 생각하여 보도록 하자. 마트에서 과자 바구니에 여러 가지 과자를 넣어 구성하여 판매대에 올려놓는다. 그리고 그 바구니에 특정한 이름을 붙여서 판매를 한다. 과자를 사러 마트에 온 사람들은 과자종합선물세트를 보고, 필요한 경우 물건을 구입한다. 그리고 가정에 가져가서 맛있게 먹습니다. 이처럼 함수라는 것은 여러 가지 명령어들이 들어 있고, 함수명이 있는데, 이러한 함수는 사용자가 필요한 경우 불러와서 언제든 사용할 수 있도록 되어 있다.
2엔트리로 신호와 함수 이해하기
1. 엔트리로 우주로 떠나는 로켓 만들기
우주로 떠나는 로켓을 엔트리 블록 프로그램으로 만들어 보도록 하자. 우선은 로켓을 발사하기 위해서는 로켓과 관제탑이 필요하며, 관제탑을 함수로 만들어서 관제탑 신호가 들어오면, 관제탑 함수를 실행할 수 있도록 한다. 또한 신호를 이용하여 로켓에서 관제탑으로 신호를 줘서 영향을 줄 수 있도록 하며, 관제탑은 다시 로켓에게 신호를 줘서 영향을 줄 수 있도록 만들어 보도록 하자.
2단원 2차시의 지체장애 학생을 위한 컴퓨터 환경 만들기의 PC 태블릿 모드 사용법을 참고하여 터치모니터와 함께 사용해보자.
가. 오브젝트 추가
나. 오브젝트에 엔트리 블록 코딩
순번 3 오브젝트를 클릭
블록탭-[시작]-[시작하기 버튼을 클릭했을 때]
블록탭-[생김새]-[안녕!을(를) 4초 동안 말하기]-“안녕!”을 “관제탑.. 관제탑..”으로 변경하고, 4초를 2초 동안으로 변경
블록탭-[생김새]-[안녕!을(를) 4초 동안 말하기]-“안녕!”을 “모든 이륙준비 완료”로 변경하고, 4초를 2초 동안으로 변경
속성-[신호]-[신호1 입력]-[확인]
블록탭-[시작]-[신호 1 신호보내기]
순번 3 오브젝트를 클릭 (로켓)
블록탭-[시작]-[신호2 신호를 받았을 때]
블록탭-[생김새]-[안녕!을(를) 4초 동안 말하기]-“안녕!”을 “출발하겠다”로 변경하고, 4초를 2초 동안으로 변경
블록탭-[움직임]-[2초 동안 x:10 y:10 만큼 움직이기]-x:260, y:180으로 변경
블록탭-[흐름]-[만일 참이라면]-[판단]-[벽에 닿았는가?]-“참”을 “벽에 닿았는가?”로 변경
블록탭-[시작]-[다음 장면 시작하기]
순번 4 오브젝트를 클릭 (불)
블록탭-[시작]-[신호2 신호를 받았을 때]
블록탭-[생김새]-[안녕!을(를) 4초 동안 말하기]-“안녕!”을 “출발하겠다”로 변경하고, 4초를 2초 동안으로 변경
블록탭-[움직임]-[2초 동안 x:10 y:10 만큼 움직이기]-x:260, y:180으로 변경
블록탭-[흐름]-[만일 참이라면]-[판단]-[벽에 닿았는가?]-“참”을 “벽에 닿았는가?”로 변경
블록탭-[시작]-[다음 장면 시작하기]
속성탭-[함수]-[추가]-[관제탑]
블록탭-[생김새]-[안녕!을(를) 4초 동안 말하기]-“안녕!”을 “체크 활주로 확인”으로 변경하고, 4초를 2초 동안으로 변경
블록탭-[생김새]-[안녕!을(를) 4초 동안 말하기]-“안녕!”을 “모든 준비가 끝났다 이륙해도 좋다. 출발”로 변경하고, 4초를 2초 동안으로 변경
순번 2 오브젝트 클릭
블록탭-[시작]-[신호 1] 신호를 받았을 때
블록탭-[함수]-[관제탑]
블록탭-[시작]-[신호 2] 신호 보내기
순번 6 오브젝트 클릭
블록탭-[생김새]-[안녕!을(를) 4초 동안 말하기]-“안녕!”을 “대기권 탈출.. 성공.. 가자..우주로..”로 변경하고, 4초를 2초 동안으로 변경
블록탭-[흐름]-[2초 기다리기]-2초를 1초로 변경
블록탭-[흐름]-[계속 반복하기]
블록탭-[움직임]-[2초 동안 x:10 y:10 만큼 움직이기]-x:228, y:0으로 변경한 후 “계속 반복하기” 블록 안에 삽입
블록탭-[생김새]-[크기를 10만큼 바꾸기]-10을 0.5로 변경
블록탭-[흐름]-[만일 참이라면]-[판단]-[벽에 닿았는가?]-“참”을 “벽에 닿았는가?”로 변경하고 “계속 반복하기” 안에 삽입
블록탭-[생김새]-[모양 숨기기]
순번 7 오브젝트 클릭
블록탭-[흐름]-[4초 기다리기]-4초를 2초로 변경
블록탭-[흐름]-[계속 반복하기]
블록탭-[붓]-[붓의 색을(으)로 정하기]-색을 빨간색으로 변경한 후 “계속 반복하기” 블록 안에 삽입
블록탭-[붓]-[붓의 굵기를 1만큼 바꾸기]-1을 2로 변경한 후 “계속 반복하기” 블록 안에 삽입
블록탭-[움직임]-[2초 동안 x:10 y:10 만큼 움직이기]-x:228, y:0으로 변경한 후 “계속 반복하기” 블록 안에 삽입
블록탭-[생김새]-[크기를 10만큼 바꾸기]-10을 0.5로 변경
블록탭-[흐름]-[만일 참이라면]-[판단]-[벽에 닿았는가?]-“참”을 “벽에 닿았는가?”로 변경하고 “계속 반복하기” 안에 삽입
블록탭-[생김새]-[모양 숨기기]
다. 오브젝트에 엔트리 블록 코딩 실행 결과
엔트리 블록 코딩을 끝낸 후 실제적인 실행 결과를 확인해 보도록 하자. 우주로 떠나는 로켓 프로그램 엔트리 블록 코딩의 결과는 아래와 같이 실행된다.
실행 결과를 살펴보면, 시작과 동시에 로켓에서 “관제탑.. 관제탑..”과 “모든 이륙 준비 완료.”가 출력된다. 그리고 다음으로 신호가 관제탑으로 이동하게 되며, 관제탑에서는 “체크, 활주로 확인.”와 “모든 준비가 끝났다. 이륙해도 좋다. 출발”을 출력한다. 그리고 다시 로켓으로 신호를 보내고, 로켓에서는 “출발하겠다.”를 출력하고 활주로를 따라 올라가며, 화면에 로켓이 닿았다면, 장면 2로 넘어가게 된다. 장면 2에서는 로켓에서 “대기권 탈출.. 성공.. 가자.. 우주로.”를 출력하며, 화면의 끝까지 이동하며 프로그램을 종료한다.
3파이선으로 신호와 함수 이해하기
1. 파이선으로 우주로 떠나는 로켓 만들기
파이선으로 우주로 떠나는 로켓 프로그램을 만들어 보도록 하자. 우선 전체적인 구성은 엔트리 블록 프로그램 코딩과 비슷할 수 있다. 그러나 파이선에서는 가장 먼저 로켓과 관제탑의 함수를 만들고, 로켓 함수에서 관제탑 함수를 호출하여, 함수와 함수 간에 어떠한 영향을 줄 수 있는지에 대해서 생각하며, 우주로 떠나는 로켓 프로그램을 코딩하여 보도록 하자.
함수라는 것은 여러 가지 명령어들의 묶음으로 생각할 수 있으며, 함수의 종류에는 파이선에서 제공하는 내장함수와 직접적으로 만들어서 사용하는 직접 함수로 나누어서 정의할 수 있으며, 함수의 사용 방법은 아래의 구문과 같다.
def 함수이름(매개변수 목록):
# 코드블록
return 결과
가. 파이선 프로그램 코딩
파이선으로 우주로 떠나는 로켓 프로그램을 작성한 전체 코딩은 아래의 내용으로써, 전체적 코딩을 살펴보면, 가장 먼저 로켓과 관제탑의 함수가 각각 만들어져 있다. 그리고 로켓의 함수만을 시작과 함께 호출하였다. 따라서 로켓 함수가 불려와져서 함수의 내용이 실행되면서, 중간에 관제탑의 함수를 호출하여 관제탑 함수의 명령어가 실행될 수 있도록 하였다. 그렇다면 전체적인 파이선 프로그램 코딩 내용을 살펴보고, 사칙연산 계산기 프로그램이 어떻게 코딩 되었는지 학습하여 보도록 하자.
화상키보드 사용법은 2단원 2차시의 지체장애 학생을 위한 컴퓨터 환경 만들기를 참조하자.
import time
def rocket( ):
print(“로켓: 관제탑, 관제탑 ⁄ n”)
time.sleep(2)
print(“로켓: 모든 이륙준비 완료 ⁄ n”)
time.sleep(2)
control_tower( )
time.sleep(2)
print(“로켓: 출발하겠다. ⁄ n”)
time.sleep(2)
print(“로켓: 5,4,3,2,1,0 ⁄ n”)
time.sleep(2)
print(“로켓: 대기권 탈출, 성공.. ⁄ n”)
time.sleep(2)
print(“로켓: 가자 우주로.. ⁄ n”)
def control_tower( ):
print(“관제탑: 체크, 활주로 확인 ⁄ n”)
time.sleep(2)
print(“관제탑: 모든 준비가 끝났다. 이륙해도 좋다. 출발. ⁄ n”)
rocket()
전체적인 프로그램 코딩을 살펴보면, 단순한 구조를 가지고 있는데, 가장 윗부분에는 “def rocket( ):”라는 함수와 “def control_tower( ):” 함수가 선언되어 각 각의 함수에 여러 가지 명령어를 포함하고 있다. 그리고 마지막 부분에는 rocket( ) 함수를 호출하여 명령어를 실행할 수 있도록 하였으며, rocket( ) 함수 안에는 “control_tower( )” 호출하여 사용하고 있다. 전체적인 내용을 이해하였다면, 아래에서 세부적으로 프로그램 코딩의 내용을 학습하여 보도록 하자.
print(“로켓: 관제탑, 관제탑 ⁄ n”)
time.sleep(2)
print(“로켓: 모든 이륙준비 완료 ⁄ n”)
time.sleep(2)
control_tower( )
time.sleep(2)
print(“로켓: 출발하겠다. ⁄ n”)
time.sleep(2)
print(“로켓: 5,4,3,2,1,0 ⁄ n”)
time.sleep(2)
print(“로켓: 대기권 탈출, 성공.. ⁄ n”)
time.sleep(2)
print(“로켓: 가자 우주로.. ⁄ n”)
첫 부분은 로켓함수를 “def rocket( ):” 선언하면서 함수가 시작된다. 그리고 print( ) 함수로 “로켓: 관제탑, 관제탑 ⁄ n”을 출력한다. 그리고 다음으로 “로켓: 모든 이륙준비 완료 ⁄ n”을 출력한 후,“control_tower( )”를 호출하게 되는데, 이 것은 관제탑의 함수를 호출한 것으로써 관제탑의 함수는로켓함수 다음에 정의하였다. 따라서 control_tower( )의 함수 안에 있는 모든 명령어를 실행하고 나면, 다음으로 다시 로켓 함수에서 print( ) 함수를 사용하여 “로켓: 출발하겠다. ⁄ n”를 출력한 후 “로켓: 5,4,3,2,1,0 ⁄ n”를 출력한다. 그리고 마지막으로 “로켓: 대기권 탈출, 성공.. ⁄ n”과 “로켓: 가자 우주로.. ⁄ n”를 출력하고 함수를 종료하게 된다.
def control_tower( ):
print(“관제탑: 체크, 활주로 확인 ⁄ n”)
time.sleep(2)
print(“관제탑: 모든 준비가 끝났다. 이륙해도 좋다. 출발. ⁄ n”)
다음으로는 관제탑에 대한 control_tower( ) 함수가 정의 되어 있는데, 함수의 선언은 “def control_tower():”이다 그리고 다음으로 print( ) 함수를 이용해서, “관제탑: 체크, 활주로 확인 ⁄ n”이 출력되도록 한 후, “관제탑: 모든 준비가 끝났다. 이륙해도 좋다. 출발. ⁄ n”가 출력되면서 함수를 종료하게 된다.
rocket()
마지막으로 파이선 프로그램이 시작되면서 실행되는 프로그램 코딩으로써 프로그램 시작과 동시에 로켓함수인 rocket( )을 호출하게 된다. 따라서 함수 호출로 인해서 rocket( ) 함수의 모든 내용을 출력하게 되는데 rocket( ) 함수에서는 control_tower( ) 함수를 호출하므로 로켓함수의 호출 중간에 관제탑 함수를 호출하여 실행하고 남은 로켓함수의 명령어들을 실행하고 프로그램을 종료하게 된다.
나. 파이선 프로그램 코딩 결과
파이선으로 우주로 떠나는 로켓 프로그램을 완성하였다면, 프로그램을 실행하여 함수가 어떻게 호출되고 사용되었는지 생각하며, 프로그램의 결과를 알아보도록 하자. 프로그램 실행 결과는 아래와 같다.
실행 결과를 살펴보면, 프로그램이 시작과 동시에 “로켓: 관제탑, 관제탑”과 “로켓: 모든 이륙 준비 완료”를 출력한다. 그리고 그다음으로 관제탑이 출력되는데, “관제탑: 체크, 활주로 확인”과 “관제탑: 모든 준비가 끝났다. 이륙해도 좋다. 출발.”이 출력된다. 관제탑이 호출이 끝나고 난 다음으로는 다시 로켓으로 돌아와서, “로켓: 출발하겠다.”과 “로켓: 5,4,3,2,1,0”을 출력한다. 그리고 마지막으로 “로켓: 대기권 탈출, 성공..”와 “로켓: 가자 우주로..”을 출력하고 프로그램은 종료되게 된다.
1) 각 동물들의 함수를 만들고, 함수를 호출하여 동물들의 소리를 출력되도록 해 보자.
2) 사칙연산을 함수로 만들어 각 연산에 따라 출력되도록 해 보자.
3) 이진법으로 변환하는 함수를 만들고 함수를 호출하여 십진법을 이진법으로 출력되도록 해 보자.