티스토리 뷰

728x90
반응형

Chapter 09 연습문제 풀이

 

1. 함수를 설명한 것으로 맞는 내용을 모두 고르시오.

① 한 번 만들어 놓으면 호출만 하면 된다.

Answer : O

② 내부의 작동을 신경 쓰지 않는다는 의미로 블랙박스라고도 한다.

Answer : O

③ 커피 자판기는 함수의 좋은 비유이다.

Answer : O

 함수는 여러 번 호출하는 것보다는 한 번만 호출해서 사용하는 것이 효율적이다.

Answer : X

함수는 코드의 반복을 줄여줄 수 있고, 한 번 만들고 나면 내부 로직을 신경쓰지 않아도 되서 오류를 줄여줄 수다.  때문에 만들어 놓은 함수를 많이 사용할 수록 효율적으로 함수 활용을 하고 있는 것이다.

 

 

2. 두 수를 더해 결과를 반환하는 함수이다. 빈칸을 채우시오.

def sum(v1, v2) :

    result = 0

    result = v1 + v2

    return result

 

 

3. 2의 함수를 호출하는 방법으로 올바른 것은?

① hap = sum()

# 함수가 void형 ()으로 정의되 있거나 매개변수에 default 값이 정의되어 있어야 한다.

② hap = sum(10)

# 두 번째 매개변수 v2에 default 값이 정의되어 있어야 한다.

③ hap = sum(10 20)

# ,로 구분해 줘야 한다.

④ hap = sum(10, 20)

Answer : sum의 매개변수 개수가 2개 이므로 ,로 구분해 인자 값 2개를 전달한다.

⑤ hap = sum(10 : 20)

 

 

4. 함수의 반환값과 관련된 내용 중 틀린 것은 ?

① 함수에는 반환값이 없어도 된다.

② 함수에서 반환될 수 있는 값은 원칙적으로 1개뿐이다.

# 함수의 정의 자체는 반환값이 1개여야 하지만 리스트나 튜플로 여러 개의 값을 반환할 수 있다.

③ return 문을 사용한다.

④ 반환값이 없을 때도 rerturn 문을 꼭 써야 한다.

Answer : 반환값이 없으면 return 문을 안써줘도 된다.

 

 

5. 전달받은 매개변수의 숫자와 관계없이 모든 매개변수를 곱하는 함수이다. 빈칸을 채우시오.

def multiply(*var) : 

    result = 1

    for num in var :

        result = result * num

    return result

# 매개변수에 *를 붙이면 인자 값의 개수와 상관없이 튜플 형태로 전달할 수 있다. 이를 가변 인자라고 한다. 따라서 for 문으로 var의 원소를 하나 씩 꺼내준다.

이때 책에는 result의 초기값이 0으로 설정되어 있는데, 이러면 곱할 때 0이 나오므로 초기값을 1로 바꿔줬다. (안 바꿔줘도 할 수 있는 건지는 잘 모르겠네요)

 

 

6. 다음 코드를 실행했을 때 출력되는 값을 차례로 작성하시오.

a = 222

def func1() :
    print(a)
    
def func2() :
    a = 111
    print(a)
    
func1()
func2()

Answer

> 222

> 111

'''

func1의 a는 따로 지역 변수의 선언이 없기 때문에 전역 변수 a를 print()에 전달한다.

func2는 a = 111로 지역 변수를 선언했기 때문에 전역 변수 a가 지역 변수 a에 가려저 print()에는 지역 변수 a(111)이 전달된다.

'''

 

 

7. func() 함수를 호출할 때 오류가 발생하는 것을 고르시오.

def func(v1, v2 = 0, v3 = 0) :
	result = 0
  	result = v1 + v2 + v3
   	return result

① func(1)

# v1에 1이 전달되고, v2, v3에는 default 값 0이 전달된다. 따라서 출력 결과

> 1

② func(1, 2)

# v1, v2에 각각 1, 2가 전달되고 v3에는 default 값 0이 전달된다. 따라서 

> 3

③ func(0, 0, 0)

# v1, v2, v3에 모두 인자 값 0이 전달된다.

> 0

④ func()

Answer : v1에는 default 값이 설정되있지 않으므로 인자 값을 전달해 줘야 한다. 위처럼 호출하기 위해서는 void 형 이거나 v1에도 default 값을 설정해 줘야 한다.

> TypeError: func() missing 1 required positional argument: 'v1'

 

 

8. myFunc.py에 fun1(), fun2()가 정의되어 있다고 가정하자. 다음 중 오류가 발생하는 코드를 모두 고르시오.

① import myFunc.py myFunc.fun1()

Answer : 모듈을 import할 꺼면 .py를 생략해야 한다.

② import myFunc myFunc.fun1()

Answer : fum1() 함수를 import하고 싶으면 from 문과 함께 써야한다.

③ from myFunc import fun1() fun1()

④ from myFunc import * fun2()

Answer : *를 통해 myFunc에 정의되어 있는 모든 함수를 사용하겠다고 선언했는데 뒤에 fun2()를 또 붙이는 것은 오류다.

 

 

9. 다음 코드의 결과를 예측하시오.

def myRange(start, end, hop = 1) :
	retVal = start
    while retVal <= end :
    	yield retVal
        retVal += hop
        
hap = 0
for i in myRange(1, 5, 2) :
	hap += i
print(hap)

Answer

> 9

'''

함수는 원래 retrun을 하면 종료된다. 하지만 yield를 사용하면 함수가 어떤 값을 return한 뒤에도 종료되지 않고 남은 작업을 계속 수행한다. 이를 Generator(생성자) 함수라고 한다.

myRange(1, 5, 2)를 호출하면 myRange는 1부터 2씩 증가하면서 5까지 즉, 홀수를 하나 씩 반환해 준다.

따라서 for문의 i에 1, 3, 5가 차례로 들어가고 이를 더한 hap를 출력하면 9가 찍힌다.

'''

 

 

10. 재귀 함수를 사용해 피보나치 수열을 구현하시오.

## 피보나치 수열 함수 ##
def fibo(n) :
    if n == 0 :
        return 0
    elif n == 1 :
        return 1
    else :
        return fibo(n-1) + fibo(n-2)

## 전역 변수 ##
n = 0

## main ##
if __name__ == "__main__" :

    while(1) :
        n = int(input("피보나치 수열 F(N)의 N값을 입력하세요 --> "))
        print("F(%d) = %d" % (n,fibo(n)))

result

'''

만약 피보나치 수열 자체를 출력하고 싶으면 List를 이용한다.

## 피보나치 수열 함수 ##
def fibo(n) :
        fiboList = [0, 1]

        if n == 0 :
                return fiboList[0]
        elif n == 1 :
                return fiboList

        for i in range(2, n+1) :
                fiboList.append(fiboList[i-2] + fiboList[i-1])
        
        return fiboList

## 전역 변수 ##
n = 0

## main ##
if __name__ == "__main__" :

    while(1) :
        n = int(input("피보나치 수열 F(N)의 N값을 입력하세요 --> "))
        print("F(%d) = " % n, fibo(n))

result

'''

728x90
반응형

'python > 파이썬 for Beginner' 카테고리의 다른 글

파이썬 for Beginner Chapter 11  (4) 2019.05.17
파이썬 for Beginner Chapter 10  (9) 2019.05.13
파이썬 for Beginner Chapter 08  (4) 2019.04.28
파이썬 for Beginner Chapter 07  (15) 2019.04.15
파이썬 for Beginner Chapter 06  (0) 2019.04.15
댓글