Python : 함수(Function) - 완전수 / 소수 판별
함수 (Function)
함수(Function)란?
함수의 수학적 정의
WIKI
- 주어진 입력을 가지고 어떠한 “기능”을 수행하여 그 결과를 출력:
“기능” or “모듈(Module)” or “메소드(Method)”함수
WIKI
- 한번만 정의하여 구현한다면 동일한 기능을 코드의 중복없이 모든 곳에서 여러 번 호출하여 사용 가능.
-
붕어빵 가게의 붕어빵 “틀” 과 같은 역할을 수행한다.
함수의 종류 및 구조
- 사용자 정의 함수 (User-Defined-Function)
- 프로그래머가 직접 정의 / 작성한 함수
def 함수명(변수1, 변수2, ...): # 함수의 입력 값 명령문 return <표현식> # 함수의 출력 값
- 프로그래머가 직접 정의 / 작성한 함수
- 라이브러리 붙박이 함수 (Built-in Function)
- Python에서 기본적으로 제공하는 함수
Built-in Functions
Python
- Python에서 기본적으로 제공하는 함수
함수의 정의
- “함수명” 은 변수 이름 만드는 규칙과 동일하다.
def 함수명(변수명1, 변수명2, ... , 변수명n): # 함수의 입력값 <몸체> return <표현식> # 함수의 결과값
- 변수명1, 변수명2, … , 변수명 n 은 <몸체> 에서 사용하기 위한 함수의 입력 값에 대한 변수의 이름. == 형식 파라미터 (Formal Parameter)몸체>
- 함수를 정의 할 때에는 몸체가 실행 되지 않는다.
- return이 없어도 함수 정의 가능. (return이 없는 함수를 procedure 라고 한다.)
함수의 호출 (Call)
- 정의된 함수를 “사용” 하는 것.
<함수이름> (<표현식1>, <표현식2>, <표현식3>, ... , <표현식n>)
- 이미 정의 되어있는 함수만 호출 가능
- 괄호 안에 들어가는 표현식은 실제 파라미터(Actual Parameter) 혹은 인수(Argument)라고 한다.
- 인수(실제 파라미터)개수 = 형식 파라미터의 개수
- 호출 시 세부 동작 순서
- 표현식 계산
- 결과 값을 각각 형식 파라미터 변수에 지정
- 함수의 <몸체>를 실행몸체>
- 최종 결과값 반환
(Additional) Type Hint
- Python은 동적 자료형 언어
- 변수의 자료형(Type)이 계속 바뀔 수 있다.
>>> a = 1 >>> type(a) <class 'int'> >>> a = 'dj' >>> type(a) # 기존 int 였던 변수 'a'의 자료형이 초기화 될 때마다 그에 맞는 자료형으로 변환된다. <class 'str'>
- 함수 선언 시, 대개 자료형을 적지 않으며 다양한 타입의 값을 함수 호출 시 할당 할 수 있다.
- 변수의 자료형(Type)이 계속 바뀔 수 있다.
- Python 3.5 부터 Type Hint 지원
- 함수 파라미터, 반환값의 “자료형” 을 표시할 수 있다.
- 개발자를 위한 단순 참고용 표시일 뿐, 오류 검사 등의 기능은 없다.
def my_life(what: str) -> str: return what + ' life'
함수의 정의 / 호출 예: isOdd()
- 주어진 입력 값이 홀수면 true, 짝수면 false를 반환
def isOdd(num): # 함수의 정의 if num % 2 == 1: return True else: return False N = int(input('자연수 N 입력: ')) for i in range(1, N+1): if isOdd(i): print(i, end='') # 함수의 호출
- 함수의 수행 과정
- 변수 i 에 대한 값 계산
- 해당 값을 isOdd()함수의 매개 변수인 num 변수의 값으로 할당
- 함수 계산 실행
- 입력 값에 따른 결과 반환
- 변환된 값에 따른 동작 수행
- 이전 과정의 반복
지역 변수 및 전역 변수
- 지역 변수(local variable)
- 함수 내에서 최초로 정의 / 사용된 변수
- 함수 코드 블록 내에서만 사용 가능
- 전역 변수(global variable)
- 가장 바깥의 코드 블록(들여쓰기(indent)가 없는 곳)에서 최초로 정의 / 사용된 변수
- global 키워드로 정의된 변수
- 프로그램 전체에서 사용 가능
- 지역 / 전역 변수 사용의 우선순위
- 지역 / 전역 변수 이름이 동일한 경우
- 함수 안에서는 지역 변수 우선 사용
- 함수 밖에서는 전역 변수 사용 (지역 변수는 사용 불가)
- 소스 코드
def foo(a) a = 1 print(a) a = 10 print(a) foo(a) print(a) # 실행결과 >>> 10 1 10 # 여기서 foo() 함수는 함수 밖 a의 값을 변경하지 못했다.
- “global” 키워드로 지역변수의 전역 변수 선언이 가능하다.
- 소스코드
def foo(): global a a = 1 print(a) a = 10 print(a) foo(a) print(a) # 실행 결과 >>> 10 1 1
- 지역 / 전역 변수 이름이 동일한 경우
Boolean 자료형(추가)
- Python 에서 Boolean 자료형은 정수 자료형의 부분형(subtype)
- 변수에 True를 저장하면 실제로는 정수 1이 저장, False는 정수 0이 저장된다.
- 반대로 정수 0도 False, 0이 아닌 정수는 True로 인식 가능.
실습 (1) 세 정수의 최대값 반환 함수
- 구현 내용
- 형식 매개 변수로 주어진 세 정수 x, y, z의 최대값을 반환하는 함수 max3(x, y, z)를 정의.
- max3 함수의 호출을 사용하여, 표준 입력된 세 정수 a, b, c의 최대값을 구하는 프로그램 구현.
(1) 소스코드 및 실행 결과(클릭)
소스 코드 및 실행 결과
실습 (2) 두 정수의 약수 여부 판별 함수
- 구현 내용
- 형식 매개 변수로 주어진 두 정수 n, m에 대해 n이 m의 약수인지의 여부를 판별한 결과를 반환하는 함수 isDivisor(n, m) 정의
- isDivisor 함수의 호출을 사용하여, 표준 입력된 정수 a의 모든 약수를 출력하는 프로그램 구현
(2) 소스코드 및 실행 결과(클릭)
소스 코드 및 실행 결과
실습 (3) 세 정수의 최대 공약수 구하기
- 구현 내용
- 형식 매개 변수로 주어진 두 정수 x, y에 대해 x와 y의 최대 공약수를 반환하는 함수 gcd2(x, y)정의.
- gcd2 함수의 호출을 사용하여, 표준 입력된 세 정수 a, b, c의 최대 공약수를 출력하는 프로그램 구현.
(3) 소스코드 및 실행 결과(클릭)
소스 코드 및 실행 결과
실습 (4) 세 정수의 최소공배수 구하기
- 구현 내용
- 5.1.3의 gcd2(x, y) 함수를 호출하여 두 정수의 최소공배수를 구하는 lcm2(x, y) 함수를 작성
- lcm2 함수를 활용하여 표준 입력된 세 정수 a, b, c의 최소 공배수를 출력하는 프로그램 구현
(4) 소스코드 및 실행 결과(클릭)
소스 코드 및 실행 결과
def gcd2(x, y):
while y:
x, y = y, x%y
return x
def lcm2(x, y):
return x*y//gcd2(x, y)
a = input('자연수 a 입력: ')
b = input('자연수 b 입력: ')
c = input('자연수 c 입력: ')
try:
a = int(a)
b = int(b)
c = int(c)
if a <= 0 or b <= 0 or c <= 0:
print('잘못된 입력입니다')
else:
print('최소공배수 : ', lcm2(lcm2(a, b), c))
except:
print('잘못된 입력입니다')
실습 (5) 완전수 판별
- 구현 내용
- 매개 변수로 주어진 m이 완전수인지 판별하는 함수 isPerfect(m)을 작성
- isPerfect 함수 호출을 사용하여 표준 입력된 정수 a가 완전수인지 판별하는 프로그램 작성 (예외 처리 포함할 것)
(5) 소스코드 및 실행 결과(클릭)
소스 코드 및 실행 결과
실습 (6) 모든 완전수 출력
- 구현 내용
- isPerfect 함수 호출을 사용하여 표준 입력된 2보다 큰 자연수 N보다 작거나 같은 모든 완전수 출력 (예외 처리 포함할 것)
(6) 소스코드 및 실행 결과(클릭)
소스 코드 및 실행 결과
최대한의 설명을 코드 블럭 내의 주석으로 달아 놓았습니다.
혹시 이해가 안가거나 추가적인 설명이 필요한 부분, 오류 등의 피드백은 언제든지 환영합니다!
긴 글 읽어주셔서 감사합니다. 포스팅을 마칩니다.
Task Lists
- 함수 (Function)
- 함수의 종류 및 구조
- 함수의 정의
- 함수의 호출 (Call)
- (Additional) Type Hint
- 함수의 정의 / 호출 예: isOdd()
- 지역 변수 및 전역 변수
- Boolean 자료형(추가)
- 실습 (1) 세 정수의 최대값 반환 함수
- 실습 (2) 두 정수의 약수 여부 판별 함수
- 실습 (3) 세 정수의 최대 공약수 구하기
- 실습 (4) 세 정수의 최소공배수 구하기
- 실습 (5) 완전수 판별
- 실습 (6) 모든 완전수 출력
Comments