• 검색 결과가 없습니다.

함수란 ?

N/A
N/A
Protected

Academic year: 2022

Share "함수란 ?"

Copied!
41
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

10장. 특정 작업을 수행하는 함수 ­ 함수

10.1. 함수 소개

(2)

함수란 ?

프로그램을 구성하는 기본적인 구성요소이며 하나의 프로그램에 여러 함수가 포함될 수 있다.

함수

프로그램

(3)

작은 단위의 함수를 이용하면 큰 소프트웨어를 쉽게 만들 수

있다.

(4)

1. 다른 프로그램에서 재사용이 가능

함수의 역할

2. 가독성이 증가

3. 유지 관리가 쉬워진다.

(5)

함수는 입력을 받아서 특정한 작업을 수행한다.

함수의 구성

Add ( )

3 8

11 입력

출력

함수

(6)

함수의 특징

1. 함수는 서로 구별되는 이름을 가지고 있다.

2. 함수는 특정한 작업을 수행한다.

3. 함수는 입력을 받을 수 있고 수행 결과를 반환할 수

있다

(7)

함수의 필요성

7

▪ 해결해야 하는 문제들의 범위가 커지고 복잡해지면 그 문제를 해결하기 위해 작성해야 하는 프 로그램도 커짐

▪ 전체 프로그램을 작고 간단한 프로그램들로 나누어서 작업하면 문제 해결 가능

▪ 이런 작고 간단한 프로그램들을 ‘함수’라고 함

▪ 전체 프로그램 = 함수의 합


10.1. 함수 소개

(8)

함수의 예 : 만년 달력 프로그램

8

▪ 만년 달력 프로그램 (년 월을 입력 받아서 달력으로 출력하는 문제)작성시 필요한 작업

• 입력 작업 : 년 월을 입력 받음

• 처리 작업 : 주어진 입력 기반으로 해당월의 1월이 무슨 요일인지 결정해야 함

• 출력 작업 : 배경 모습, 글씨 모양, 글씨 크기, 색 등의 출력양식 결정 및 결과 출력

▪ 세부 작업들은 크기 및 복잡한 정도에 따라 더 작게 혹은 크게 나눌 수 있음

10.1. 함수 소개

(9)

함수의 예 : 삼각형 종류 판별

9

▪ 세 변을 입력을 받아서 삼각형의 요건이 되는지 확인

• 3개의 함수를 생각해 볼 수 있음

• 삼각형 요건 확인 (is_triangle() 함수) , 정삼각형 여부 확인 (is_regular() 함수), 이등변삼각형 여부 확인(is_isosceles() 함수)

10.1. 함수 소개

(10)

10장. 특정 작업을 수행하는 함수 ­ 함수

10.2. 함수의 정의와 호출

(11)

함수(Function)의 정의 (1/2)

11

10.2. 함수의 정의와 호출

▪ return문이 있는 함수 정의

▪ return문이 있는 함수 호출

result = FunctionName() 함수 이름이 FunctionName 이라는 함수를 호출하여 함수 가 반환하는 값인 ResultValue를 저장할 변수(result)를 지 정하여 저장함

(12)

함수(Function)의 정의 (2/2)

12

▪ 함수 정의 시 주의해야 할 사항

• 함수 이름

–함수가 수행하는 작업을 요약하는 단어로 이름을 정의하는 것을 권장함 –함수 이름 작성 시 변수 이름 작성 규칙을 지켜야 함

–맨 처음 단어는 문자로 작성

–문자, 숫자, _(Under bar)로 이루어진 이름을 사용

–키워드에 있는 이름은 사용 불가능 (예) if, while, def 등

• 인자 (Parameters)

–인자를 여러 개 사용할 수 도 있고, 인자가 존재하지 않을 수도 있음 –인자를 사용하지 않을 시에는 인자를 생략하고 괄호만 표기

• return 문

–결과값을 반환해주는 문장

–return 문을 수행하면 함수가 종료됨 –return 뒤에는 값, 수식 또는 변수 등이 사용됨

–return문을 사용하지 않을 시에는 return문 전부를 생략 가능

10.2. 함수의 정의와 호출

(13)

return문을 통해 값을 반환하는 함수 (1/2)

13

10.2. 함수의 정의와 호출

▪ 파이썬에서의 함수의 정의와 호출

(14)

return문을 통해 값을 반환하는 함수 (2/2)

14

10.2. 함수의 정의와 호출

▪ 두 수의 평균값을 반환하는 함수

def average(num1, num2):

result = (num1 + num2) / 2 return result

▪ 평균값 반환하는 함수 호출

>>> med = average(2,4)

>>> med 3.0

▪ 이런 함수의 호출의 결과는 일반적으로 함수가 반환하는 값으로 취급

▪ 함수 average는 두 개의 값을 받아 평균을 return하는 함수

• 호출 자체가 평균값으로 인식

▪ return이 있는 함수는 식으로 호출 가능

goal = average(2,4)*2 = 3 * 2

(15)

[예제 10-1]return문이 있는 함수 정의 및 호출1

15

10.2. 함수의 정의와 호출

▪ 요구사항

▪ 문제 해결 알고리즘

▪ 프로그램

▪ 테스트

직육면체의 부피를 구하는 함수를 정의하고 호출해 보자.

부피를 구하는 공식은 가로×세로×높이다. → volume=width×length×height

defcalculate_volume (width, length, height):

result = width x length x height returnresult

>>> volOfBox = calculate_volume(4, 4, 5)

>>> print (VolOfBox)

(16)

[예제 10-2]return문이 있는 함수 정의 및 호출2

16

10.2. 함수의 정의와 호출

▪ 요구사항

▪ 문제 해결 알고리즘

▪ 프로그램

▪ 테스트

result = x * x + x + 1

def f(x):

result = (x * x) + x + 1 return result

>>> ans = f(5)

>>> print (ans) 31

(17)

[실습 10-1] return문이 있는 함수 정의 및 호출1

17

10.2. 함수의 정의와 호출

▪ 요구사항

▪ 문제 해결 알고리즘

▪ 테스트

int형 숫자 1개를 인자로 입력받아, 그 인자보다 3이 큰 값을 반환하는 함수를 정의하 여 보자.

① 함수 이름은 increase_3, 인자는 number → def increase_3(number):

② number에 3을 더한 결괏값인 result 구하기 → result = number + 3

③ 실행의 결괏값인 result를 반환한다. → return result

>>> n1 = 3

>>> n2 = 4

>>> n3 = 5

>>> increase_3(n1) 6

>>> increase_3(n2) 7

>>> increase_3(n3) 8

>>>

(18)

[실습 10-2] return문이 있는 함수 정의 및 호출2

18

10.2. 함수의 정의와 호출

▪ 요구사항

▪ 문제 해결 알고리즘

▪ 테스트

int형 숫자로 구성된 list를 인자로 입력받아,

list를 구성하는 element의 평균값을 반환하는 함수를 정의하여 보자.

① 함수 이름은 list_avg, 인자는 list인 numlist → def list_avg(numlist)

② list의 평균값을 구한다.

②-1 list의 모든 element들을 sum에 더한다.

→ for number in numlist:

sum = sum + number

②-2 모두 더한 값을 list의 길이로 나눈다. → avg = sum/len(numlist)

③ 실행의 결괏값인 avg를 반환한다. → return avg

>>> math_score = [90,80,70,50,60]

>>> list_avg(math_score) 70.0

>>>

(19)

[퀴즈 10-1]

19

10.2. 함수의 정의와 호출

▪ 다음 요구사항을 만족하는 함수를 정의하여 보자.

I 요구사항 I

• 두 개의 숫자를 입력받아 두 수의 차를 구하는 함수를 작성한다.

• 함수 이름은 sub_number이다.

• 인자로 number1, number2를 입력받는다.

• 결괏값으로 result를 반환한다.

(20)

[참고] 파일 만들기 (1/2)

20

10.2. 함수의 정의와 호출

함수 파일로 저장

함수 호출

(21)

[참고] 파일 만들기 (2/2)

21

함수 호출 포함 파일로 저장

파일 실행을 통한 함수 호출

10.2. 함수의 정의와 호출

(22)

[참고] 함수의 동작 원리

22

▪ 함수의 동작 원리

1. 첫 번째 문장부터 실행 2. 함수 average()를 호출

-함수 average()가 정의되어 있는 파일로 넘어감 -함수 average()의 프로그램을 실행

3. 실행의 결과 값인 result를 반환

-변수 avg_score에 반환된 result 값이 할당

4. 함수의 수행이 끝난 후에는 IDLE창으로 복귀하여 다음 print문을 실행

10.2. 함수의 정의와 호출

(23)

[참고] 주석 (1/2)

23

▪ 파이썬으로 프로그래밍을 할 때, 프로그램의 실행과는 상관없지만 코드의 이해를 위해 코드 사 이사이 설명을 남겨두고 싶을 때가 있음

▪ 주석은 코드와 같이 작성하지만, 실행과는 상관이 없는 특수한 기능

▪ 아래 문장에서 제품 가격에 왜 1.1을 곱했는지 코드만 봐서는 알 수 없음

▪ 주석 추가 시 이해 가능

▪ 아래처럼 사용 가능

totalPrice = productPrice * 1.1

totalPrice = productPrice * 1.1 #10%의 세금을 추가함

#10%의 세금을 추가함

totalPrice = productPrice * 1.1

10.2. 함수의 정의와 호출

(24)

[참고] 주석 (2/2)

24

▪ 여러 줄의 주석 사용 가능

• 따옴표 3개

▪ 불필요한 주석은 오히려 코드의 이해를 떨어뜨릴 수 있음

'‘’

모든 제품에는 10%의 세금이 추가되어야 합니다.

부가가치세와 관련된 국내 법규를 지켜야 합니다.

해당 내용은 2015.10.11 부터 적용됩니다.

''’

totalPrice = productPrice * 1.1

10.2. 함수의 정의와 호출

(25)

[퀴즈 10-2]

25

▪ 다음과 같은 요구사항을 만족하여 프로그램을 작성하여 보자.

▪ 테스트

10.2. 함수의 정의와 호출

다음과 같이 실행하는 프로그램을 따로 함수 파일을 생성하여 다음의 [테스트]와 같이 실행하도록 작성한다.

>>> math_score = [80, 50, 90, 75, 35]

>>> maxlist(math_score) 80

(26)

return문이 없는 함수

26

▪ 결과 값이 존재하지 않는 함수

• return 문을 생략

▪ return문이 없는 함수의 정의와 호출

def FunctionName(n1, n2, ...):

Statements print ResultValue

함수 이름이 FunctionName 이라는 함수를 정의함

괄호 안의 인자(parameters)인 n1, n2...을 입력값으로 받아 Statements을 수행함.

그 결괏값인 ResultValue을 출력(print)한 후, 함수를 종료

10.2. 함수의 정의와 호출

FunctionName()

함수 이름이 FunctionName 이라는 함수를 호출

(결괏값이 없으므로, 변수 선언 없이 호출)

(27)

참고

27

▪ list를 인자로 받고 return문은 존재하지 않는 함수

• return문 없이도 결과에 변화 줄 수 있음

10.2. 함수의 정의와 호출

(28)

[참고] 인자(Parameters) 유/무

28

9.2. 함수 호출

▪ 인자가 존재하는 함수

▪ 인자가 존재하지 않는 함수

• 인자는 생략하지만 괄호는 생략하지 않음

def hello():

return ‘Hello. How are you!'

>>> greeting = hello()

>>> greeting

‘Hello. How are you!'

>>>

def repeat(n) : message = 'Ha' return message*n

>>> word = repeat(3)

>>> word

‘HaHaHa’

>>>

(29)

[예제 10-3]return문이 없는 함수 정의 및 호출1

29

10.2. 함수의 정의와 호출

▪ 요구사항

▪ 문제 해결 알고리즘

▪ 프로그램

▪ 테스트

정수를 받아 홀수인지 짝수인지를 출력하는 함수를 return문 없이 정의하고 호출해 보자.

if num % 2 == 0 → 짝수

def is_even_or_odd(num):

if num % 2 == 0 : print (num, "is even") else :

print (num, "is odd")

>>> is_even_or_odd(5) 5 is odd

>>> is_even_or_odd(8) 8 is even

(30)

[예제 10-4]return문이 없는 함수 정의 및 호출2

30

10.2. 함수의 정의와 호출

▪ 요구사항

▪ 문제 해결 알고리즘

▪ 프로그램

▪ 테스트

정수와 정수 list를 받아 정수가 리스트의 원소이면, “이미 원소입니다.”를, 그렇지 않으 면 원소를 list에 추가하고, “원소를 추가하였습니다”를 출력하는 함수를 return문 없 이 정의하고 호출하시오.

• if new_num is in num_list → “이미 원소입니다.”

• else, num_list = num_list + [new_num,] → “원소를 추가하였습니다.”

def list_add(new_num, num_list):

if (new_num is in num_list) : print ("이미 원소입니다.") else:

num_list = num_list + [new_num,]

print ("원소를 추가하였습니다.")

>>> list_add(5, [1, 3, 5])

>>> list_add(7, [1, 3, 5])

(31)

[실습 10-3] return문이 없는 함수 정의하기

31

10.2. 함수의 정의와 호출

▪ 요구사항

▪ 문제 해결 알고리즘

▪ 테스트

수지는 오늘 저녁 메뉴를 고민하다가 동전 던지기를 하여 앞면이 나오면 중국요리를, 뒷면이 나오면 일본요리를 먹기로 결정했다. 동전의 앞/뒷면을 입력하여 무슨 메뉴를 선택할지 결정해주는 프로그램을 return문 없이 작성해보자.

• if 동전의 면 == ‘앞’ → ‘중국 요리’

• else → ‘일본 요리’

• 결정된 요리 출력

- 동전의 면이 앞면인 경우에는, ‘중국 요리’로 결정되어 출력된다.

- 동전의 면이 뒷면인 경우에는, ‘일본 요리‘로 결정되어 출력된다.

>>> dec_food('앞')

중국 요리로 결정되었습니다.

>>>

(32)

[퀴즈 10-3]

32

▪ 다음과 같은 요구사항을 만족하여 함수를 정의하여 보자.

10.2. 함수의 정의와 호출

I 요구사항 I

- 두 개의 문자열을 받아, 두 문자열을 연결하는 함수를 작성한다.

- 함수 이름은 concate_str() 이다.

- 인자로 str1, str2를 입력받는다.

- 결괏값을 출력한다.

I 프로그램 I

(33)

[연습문제]

33

1. 괄호 안의 인자(parameters)인 number1, number2를 입력 값으로 받아 result = (num1 + num2)을 수행하고, 그의 결과 값 result를 반환 (return문) 한 후 종료하는 이름이 average라는 함수를 정의해 보자.

def

(34)

[연습문제]

34

2. 다음과 같은 함수가 정의되어 있을 때, 다음 실행문의 결과를 예측해보자.

3. 기억해야 할 중요한 사항은 함수를 정의하는 것과 함수를 수행하는 것은 다르다는 것이다.

함수의 수행은 함수를 ( )한 후에 함수 ( )를 통해 이루어진다.

[프로그램]

---

def print_list(num_list):

for n in num_list:

if(n != 0):

print(n) else:

break --- [테스트]

---

>>> print_list([1,2,3,0])

(35)

[연습문제]

35

4. 다음 요구사항에 맞도록 [프로그램]의 잘못된 부분을 골라내어, [테스트]와 같은 결과가 나오도록 수정해 보자.

[요구사항]

- 함수의 이름은 print_greeting, 인자는 n으로 정한다.

- 입력받은 n만큼 ‘Hello, Python'을 출력한다.

[프로그램]

def print_greeting(n):

for count in range(n):

return('Hello, Python') [테스트]

>>> print_greeting(3) Hello, Python

Hello, Python Hello, Python

(36)

[연습문제]

36

5. 다음 요구사항에 맞도록 [프로그램]의 잘못된 부분을 골라내어, [테스트]와 같은 결과가 나오도록 수정해 보자.

요구사항]

- 함수의 이름은 sum, 인자는 n으로 정한다.

- 0부터 입력 받은 n까지의 총합을 출력한다.

[프로그램]

def sum(n):

result = 0

for count in range(n):

result = result + count [테스트]

>>> print(sum(5))

>>> 10

(37)

[연습문제]

37

6. 덧셈하는 함수를 작성해 보고, 인자로 3, 5를 넣은 결과를 출력해보시오.

7. 사각형의 둘레를 구하는 함수를 작성해 보고, 두 변의 길이가 각각 3과 6인 사각형의 둘레를 출 력해보시오.

8. 6명의 학생이 시험을 치렀다. 각 시험 점수를 score라는 리스트에 넣고 이에 대해 최고점을 구 하는 함수를 for문을 이용해서 작성해보시오.

I 테스트 I

>>>

8

>>>

I 테스트 I

>>>

18

>>>

I 테스트 I

>>>

최고 점수는 100 점 입니다.

>>>

(38)

[연습문제]

38

9. 노래방 기계에서 템포를 조정하는 함수를 작성하려 한다. 각 노래의 기본 템포는 0이고 0에서 부터 5로 갈수록 빨라진다. 위의 요구사항을 만족하는 프로그램을 작성해보시오.

10. TV 음량의 현재 음량은 3이고, 증가시킬 만큼의 음량을 입력하면 음량이 증가하는 프로그램을 작성해 보시오.

I 테스트 I

>>>

현재 템포는 0입니다. 템포 조정은 0부터 5까지 가능합니다.

조정하고자 하는 만큼의 크기를 입력: 3 조정한 후의 템포는 3 입니다.

>>>

I 테스트 I

>>>

현재 음량은 3입니다.

증가시킬 만큼의 음량을 입력: 4 증가 후의 음량은 7 입니다.

>>>

(39)

[연습문제]

39

11. 회사의 한 부서에서 출근 여부를 입력하는 프로그램을 만들려고 한다. 출근한 사람이 본인의 이름을 입력하면 출근이 완료되었다고 출력해주는 함수를 작성해보시오.

I 테스트 I

>>>

이름을 입력하세요: suzi 출근 완료되었습니다.

>>>

이름을 입력하세요: jin 출근이 불가합니다.

>>>

(40)

[연습문제]

40

12. 춘천, 부산, 대구, 수원으로 가는 기차표를 예매하는 프로그램을 작성하려 한다. 각 도시 당 5,000원, 30,000원, 2,000원, 10,000원의 비용이 든다. 도시 이름을 입력하면 금액을 결정하 고 출력해주는 함수를 작성해보시오.

I 테스트 I

>>>

춘 천(운임 : 5000원) / 부산(운임 :30000원) / 대구(운임 20000원) / 수원(운임 10000) 한곳을 입력하세요 : 수원

수원 까지의 금액은 10000 원 입니다.

>>>

(41)

[연습문제]

41

13. 양의 정수 n을 입력하면 1부터 n까지 곱해주는 factorial 함수를 작성하려 한다. 다음 테스트 화 면에 맞게 빈칸을 채워보시오.

I 프로그램 I

def factorial(x):

(

)

return ( )

I 테스트 I

>>> factorial(4) 24

>>>

참조

관련 문서

③ 함수 > 프로그래밍 > 숫자형 팔레트에서 곱하기 함수를 블록 다이어그램에 두고 화씨온도 터미널과 반복 터미널을 입력으로 연결하고 이 함수의 춗력을 C_F

 문자(char)를 데이터 타입으로 하는 스택 S가 주어져 있을 때 스택 내부의 문자를 순서대로 출력하는 함수 를 작성하고 테스트 해라. 이함수는 스택에 정의된 push,

„ 정의: 단사 함수이고 동시에 전사 함수인 함수를. 전단사 함수(one-to-one correspondence

교재: 모던웹을 위한 JavaScript Jquery 입문,

더 이상 점수는 입력되지 않는다..  마지막에

Ø 컴퓨터 : 부품 A로부터 상속받아 부품 B, 부품 C를 만든 경우, 모두 f라는 기능

EMP 테이블에서 hiredate 가 가장 최근인 사원의 입사일과 입사한지 가장 오래된 사원의 입사일을 출력 하는 쿼리문을 작성..

첫 번째 worker 함수 호출 10번 결과를 출력. 두 번째 worker 함수 호출