본문 바로가기
study/python

파이썬 함수(function) 생성, 호출 예제

by kuah_ 2022. 6. 2.

 

 

 

 

함수(function)

- 함수 이름은 다른 함수와 중복되지 않아야 하며, 문장 들여쓰기에 유의해야하 함

- 호출 방식은 함수명(정의된 인수) 형태 또는 변수명 = 함수명(정의된 인수)로 가능

- 함수를 정의할 때 괄호안에 기술하는 변수가 매개변수

- 함수를 호출할 때 괄호안에 기술하는 변수는 인수

- 인수와 매개변수 명은 다를 수 있지만, 갯수는 같아야 함

- 함수 안에서 선언된 변수의 유효영역은 함수의 영역에 한정됨

- 스코핑 룰 : 지역 변수와 전역 변수의 이름이 같고 영역이 겹칠 때는 지역 변수 우선 적용

- default parameter : 함수 호출 시 사용한 인수가 함수 선언 시 매개변수 갯수보다 적을 때 사용

  파라미터명 = "값" 형태

- arbitrary argument lists : 인수 개수의 변동이 잦을 경우 사용.

  * 매개변수명 : 튜플 형식

  ** 매개변수명 : 딕셔너리 형식

- 리턴값이 여러개일 때는 리턴값을 컴마로 구분. 할당 시 튜플로 처리됨.

 

 

 

Q1. firstNum, secondNum 두개의 매개변수를 받는 mySum(), mySub(), myDiv(), myMul() 사칙연산 함수를 각각 작성.

단, 반드시 결과를 반환(return)해야하며 if ~ elif 대신 딕셔너리 case문을 활용 

 

 

A.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def mySum(Num1,Num2):   # 덧셈연산 함수
    return Num1 + Num2  # 덧셈연산 결과를 반환
def mySub(Num1,Num2):   # 뺄셈연산 함수 
    return Num1 - Num2  # 뺄셈연산 결과를 반환
def myMul(Num1,Num2):   # 곱셈연산 함수 
    return Num1 * Num2  # 곱셈연산 결과를 반환
def myDiv(Num1,Num2):   # 나눗셈연산 함수
    return Num1 / Num2  # 나눗셈연산 결과를 반환
#
num1 = int(input("첫번째 정수를 입력 : "))
oop = input("부호를 입력하세요 : ")
num2 = int(input("두번째 정수를 입력 : "))
 
expr={"+" : mySum(num1,num2), 
"-" : mySub(num1,num2), 
"*" : myMul(num1,num2), 
"/" : myDiv(num1,num2)}
 
result = expr.get(oop,'연산자가 오류입니다.')
 
print(num1,oop,num2,'=',result) 
cs

 


 

 

Q2. 두 수를 입력받은 후, B, S 중 하나를 입력받아 B 이면 두 수 중 최대값을 출력하고, S면 최소값을 출력.

단, 함수에 인수를 전달하고 함수는 결과는 리턴하는 방식으로 코딩

 

 

A. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# ver.1 (딕셔너리 케이스 사용 시 중복 코드 단축 가능)
import os    # 화면을 클리어 하는 도스명령어 cls를 사용하기 위한 함수 system( )을 사용하기 위함
def myMax(firstNum, secondNum): # 최대값
    if firstNum > secondNum:
        return firstNum
    else:
        return secondNum
 
def myMin(firstNum, secondNum): #최소값
    if firstNum < secondNum:
        return firstNum
    else:
        return secondNum
 
while (True) :
    os.system('cls')
    print("최대값 / 최소값 판단 프로그램입니다.")
    su1,op,su2 = int(input("숫자:")),input("최대값은 B 최소값은 S 종료는 x 입력 :"),int(input("숫자:"))
    if op=='X' or op == 'x':
        print('종료합니다.')
        break 
    elif su1 == su2 :
        print("최대값, 최소값이 같습니다.")
        input("앤터키를치세요")      
    elif op == 'B' or op == 'b':
        result=myMax(su1, su2)
        print(su1,'와',su2,'중 최대값은 ',result,'입니다.')
        input("앤터키를치세요")
    elif op=='S' or op == 's':
        result=myMin(su1, su2)
        print(su1,'와',su2,'중 최소값은 ',result,'입니다.')
        input("앤터키를치세요")
    else :
        print("최대값, 최소값 선택 입력이 오류입니다.")
        input("앤터키를치세요")
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# ver.2
def myMax(num1,num2):
    if num1 > num2:
        return ['최대값',num1] # 리스트형으로 반환함
    elif num1 < num2:
        return ['최대값',num2]    
 
def myMin(num1,num2):
    if num1 > num2:
        return ['최소값',num2]  
    elif num1 < num2:
        return ['최소값',num1]  
 
firnum, bs, secnum = int(input("숫자 : ")), input("최대값은 B 최소값은 S 입력 : "), int(input("숫자 : "))
ex = {"B" : myMax(firnum,secnum),"S" : myMin(firnum,secnum)} # 딕셔너리 활용, 리스트형으로 반환받음
result = ex.get(bs,"잘못 입력했습니다."# 입력 오류 처리
print(f"{firnum}와 {secnum}중 {result[0]}은 = {result[1]}"# 딕셔너리이기 때문에 인덱스 활용하여 출력
cs

 


 

 

Q3. List Comprehension을 활용하여 함수 세 개를 작성하고, 엔터키를 누르면 출력창이 clear 되고 다음으로 넘어가도록 코딩.

x = [2, 4, 1, 5, 7, 3, 9, 10, 8, 6]

1 입력 : 리스트의 각 수를 자기 자신만큼 제곱한 리스트를 반환. (2는 2의 2제곱, 4는 4의 4제곱...)

2 입력 : 리스트에서 홀수만을 추출한 리스트를 반환

 

message = ['spam', 'ham','spam', 'ham', 'spam', 'spum', 'stam', 'spam']

3 입력 : 리스트에서 'spam'만 추출하여 반환

 

0 입력 : 종료

 

 

A. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import os
def func1():
    ls1=[24157391086# list comprehension
    print('제곱 프로그램을 수행합니다\n','원본:',ls1)
    ls2=[i*for i in ls1]
    return ls2
def func2():
    x =[24157391086# list comprehension
    print('홀수 프로그램을 수행합니다\n','원본:',x)
    ls2=[i for i in x if i % 2!=0]
    return ls2
def func3():
    message = ['spam''ham','spam''ham''spam''spum''stam''spam']
    print('스팸 프로그램을 수행합니다\n','원본:',message)
    spam_list = [ spam_txt for spam_txt in message if spam_txt == "spam" ] # list comprehension
    return spam_list  
while True# 종료 요청시까지 반복
    os.system('cls'# 화면 clear
    sel = int(input("1, 2, 3 중 한 개를 입력하세요. 종료는 0 을 입력하세요 : "))
    if sel == 0:
        print("프로그램을 종료합니다.")
        input('엔터키를 누르세요')
        break
    elif sel == 1:
        result= func1()
        print('제곱:',result)
        input('제곱프로그램이 모두 실행되었습니다. 엔터키를 누르세요')
        
    elif sel == 2:
        result=func2()
        print('홀수:',result)
        input('홀수프로그램이 모두 실행되었습니다. 엔터키를 누르세요')
        
    elif sel == 3:
        result=func3()
        print('스팸:',result)
        input('스팸프로그램이 모두 실행되었습니다. 엔터키를 누르세요')
        
    else:
        print("입력값이 오류입니다. 다시 입력하세요.")
        input('엔터키를 누르세요')
cs

 

 

 

 

댓글