끄적이는 기록일지

[파이썬(ICDL) 정리] - [컴퓨팅 & 파이썬] 4. 코드 만들기 - (4)프로시저와 함수 본문

파이썬(ICDL) 정리

[파이썬(ICDL) 정리] - [컴퓨팅 & 파이썬] 4. 코드 만들기 - (4)프로시저와 함수

시시나브로 2021. 8. 5. 05:54
728x90
 

[파이썬(ICDL) 정리] - [컴퓨팅 & 파이썬] 4. 코드 만들기 - (3)반복문

[파이썬(ICDL) 정리] - [컴퓨팅 & 파이썬] 4. 코드 만들기 - (2)조건문 [파이썬(ICDL) 정리] - [컴퓨팅 & 파이썬] 4. 코드 만들기 - (1)논리문 [파이썬(ICDL) 정리] - [컴퓨팅 & 파이썬] 3. 코드의 기초 - (4)시퀀..

kcy51156.tistory.com

 

- 프로시저와  함수는 여러 프로그램 문장을 하나로 묶어서 특징을 수행하도록 만들어진 것

- 프로시저와 함수를 호출하기 위해서는 호출(call)이 필요

- 호출할 때는 인자(argument, 매개변수, 인수) 혹은 파라미터를 전달할 수 있으며, 파라미터에 따라 프로시저나 함수의 실행 결과가 달라짐

- 프로시저와 함수는 반복적으로 호출하여 여러 번 실행이 가능하므로 효율적

 

1.프로시저

- 주어진 문장을 수행하지만 결과 값을 반환하지 않음

- 프로시저 마지막에 return  문장이 있거나 생략 가능

- 내부적으로 프로시저는 실행 종료 후 None 객체를 반환

def 함수이름(인수1, 인수2, …  ) :  # 인수는 없을 수 있음
           코드 블록
           return                  # return 문은 생략 가능

1) 인수 없는 프로시저

실습) (*)을 한 행에 10개 출력하는 프로시저 star( )를 작성하시오.

2) 인수 있는 프로시저

프로시저 호출 시 값의 전달

실습) greetName(name) 프로시저에서 이름을 키보드에서 입력하도록 수정하시오.

실습) star( ) 프로시저를 수정하여 키보드에서 입력한 숫자만큼 별을 출력하는 starCount( ) 프로시저를 작성하시오.

실습) 키보드에서 입력한 실수의 제곱을 출력하는 square( ) 프로시저를 작성하시오

2. 함수

- 프로시저와 동일하나 실행 종료 후에 지정한 값을 반환

- 값을 반환하기 위해 함수 마지막에 <return > 문장

- 함수를 호출한 곳에서 반환 값을 저장할 때는 대입문을 사용

Def 함수이름(인수1, 인수2, …  ) :  # 함수 정의, 인수는 없을 수 있음
           코드 블록
           return  값
변수 = 함수이름(인수1, 인수2, …)   # 함수 호출, return한 값이 변수에 저장됨

실습) 키보드에서 입력한 두 실수의 합을 반환하는 add2( ) 함수를 작성하시오.

실습) 3개의 실수가 저장되어 있는 튜플을 인자로 전달하면 원소 중 가장 큰 값을 반환하는 tupleMax( ) 함수를 작성하시오.

실습) 사용자에게 실수 입력: ’문구와 함께 하나의 실수를 입력하게 하고, 입력한 값을 반환하는 inputNumber( ) 함수를 작성하시오.

실습) 두 양의 정수를 입력하면 해당범위 숫자의 합을 계산하는 sum() 함수를 작성하시오. , 숫자는 작은 수, 큰 수의 순으로 입력한다.

실습) 

3.재귀 함수

ü함수(또는 프로시저)가 자기 자신을 호출하면 재귀(recursion) 함수

ü팩토리얼 계산, 자연어 처리, 트리 탐색 등

 

 0! = 1

 n! = n ×(n-1) ×(n-2) × … × 2 × 1

      = n × (n-1)!

Def factorial(n):
      if n == 0:
           return  1
      else
           return n*factorial(n-1)

실습 450) 키보드에서 입력한 정수를 factorial() 함수의 인자로 전달하고, 반환된 팩토리얼 값을 출력하시오.

실습 451) 두 양의 정수를 입력하면 해당범위 숫자의 합을 재귀적으로 계산하는 sumRecursive() 함수를 작성하시오. , 숫자는 작은 수, 큰 수의 순으로 입력한다.

4.인수 전달 방법

- 기본 값 인수(default argument)

- 키워드 인수(keyword argument)

- 가변 인수

1)  기본 값 인수

- 함수 호출 시 인수의 값을 전달하지 않으면 지정된 값을 사용

Def 함수이름(인수1=기본값1, 인수2=기본값2, …):
      코드 블록
           return  값

2) 키워드 인수

- 함수 호출 시 인수 이름과 값을 함께 전달

- 인수의 순서와 관계없이 인수 전달

3) 가변 인수

- 함수 호출 시 인수의 수가 정해지지 않아도 이를 전달할 수 있음

- 인자들은 튜플 형식으로 함수에 전달 (' ', ' ')

- 인수 앞에 *가 붙는다.

예상문제

1. 다음 중 파라미터에 대한 설명과 가장 가까운 것은?

① 조건문에서 참/거짓을 판단하는 변수이다.

② 루프에서 계속 실행 여부를 판단하는 변수 값이다.

③ 서브루틴에서 계산 결과를 저장하는 변수이다.

④ 서브루틴이 하는 일에 영향을 주는 변수이다.

 

2. 다음 중 함수를 사용하는 이유를 가장 잘 설명한 것은?

① 프로그램이 포함하고 있는 값을 계산한다.

② 복잡한 수학식을 표현할 수 있다.

③ 값을 반환하지 않는 프로그램을 실행한다.

④ 명령을 순서대로 실행할 수 있다.

 

3. 다음 중 프로시저를 사용하는 이유를 가장 잘 설명한 것은?

① 프로그램을 문서화한다.

② 프로그램 오류를 검사한다.

③ 프로그램이 포함하고 있는 값을 계산한다.

④ 값을 반환하지 않고 프로그램에서 액션을 실행한다.

 

4. 재귀(recursion)에 대한 설명으로 가장 적절한 것은?

① 순차(sequence)에 대한 반대 의미의 용어

② 함수 실행 결과를 반환할 변수

③ 사용자가 여러 번 데이터를 입력하는 것

④ 문제를 간단한 부분으로 나누고 그 간단한 부분을 해결하기 위해 스스로를 호출하는 서브루틴

 

5. 다음 중 함수나 프로시저에서 매개 변수를 사용하는 이유는?

① 서브루틴을 이해하기 쉽게 한다.

② 여러 개의 결과를 반환할 수 있다.

③ 서브루틴의 실행 회수를 저장할 수 있다.

④ 함수나 프로시저가 하는 일에 영향을 준다.

 

6. 다음 중 해당 프로그램의 값을 계산하는 서브루틴과 가장 관계 있는 용어는?

Procedure

Data type

Parameter

Function

 

7. genName 이라는 함수를 정의하도록 다음 프로그램을 수정하시오. 이 함수는 사용자에게 이름 입력을 요청하고 해당 이름을 반환한다.

name = “”
# Update the code here

def getName():   <--
	name = input(“Please enter your name: ”)
	return name

name = getName()
print(“Your name is :”, name)

8. 다음 프로그램을 수정하여 getName 이라는 함수를 정의하시오. 이 함수는 전체 이름을 위한 다음 전체 이름을 반환한다.

fullName = “Galileo Galilei”
name = “”
# Update the code here

def getName(fullName):  <--
	name = fullName
	return name

name = getName(fullName)
print(“The full name is:”, name)

9. getDistance 라는 함수를 정의하도록 다음 프로그램을 수정하시오. 이 함수는 사용자에게 distance를 미터 단위로 물어보고 distance를 반환한다.

distance = 0
userDistance = 0
# Update the code here

def getDistance():  <--
	userDistance = int(input(“Please enter distance: ”))
	return userDistance

distance = getDistance()
print(“The distance is”, distance, “meters.”)

10. for 루프와 print 행이 prtZero2Five 프로시저의 일부가 되도록 프로그램을 수정하시오.

#Update the code here

def prtZero2Five():  <--
       for i in range(6):
	 print(i)

prtZero2Five()

11. 프로그램을 수정하여 numProduct 라는 함수를 정의하시오. 이 함수는 사용자가 전달하는 두 개의 숫자를 곱한 후 결과를 반환한다.

n1 = int(input(“Enter the first number: ”))
n2 = int(input(“Enter the second number. ”))
result = 0
answer = 0

# Update the code here

def numProduct(n1, n2):  <--
	result = n1 * n2
	return result

answer = numProduct(n1, n2)
print(“The result is:”, answer)

12. 다음의 5 가지 요구사항을 구현하는 프로그램을 작성하시오.

1. 2회의 사용자 입력과 답을 저장하기 위한 3 개의 정수 변수를 정의한다.
2. 사용자가 두 개의 숫자를 입력하도록 요청한다.
3. 두 숫자를 곱하고 결과를 출력하는 프로시저를 정의한다.
4. 두 숫자를 나누고 결과를 출력하는 프로시저를 정의한다.
5. 두 프로시저를 호출하여 답을 출력한다.


n1 = int(input(“Enter the first number: ”))
 n2 = int(input(“Enter the second number. ”))
 answer = 0

 def product(n1, n2):
	answer = n1 * n2
	print(answer)

 def divide(n1, n2):
	answer = n1 / n2
	print(answer)

 product(n1, n2)
 divide(n1, n2)

13. 다음 4 가지 요구 사항을 구현하는 프로그램을 작성하시오.

1. 사람 이름을 저장할 변수를 정의한다.
2. getName 이라는 함수를 정의하여 사용자에게 이름을 입력하도록 요청하고, 해당 이름을 반환한다.
3. 함수를 호출한다.
4. 함수 호출 결과를 출력한다.


 name = “”
 def getName():
	name = input(“Please enter your name: “)
	return name

 name  = getName()
 print(“Your name is :”, name)

 

정답 : 4/1/4/4/4/4/참고

728x90
Comments