본문 바로가기

IT

12. 파이썬 - 함수

함수

'''
함수(Funtion)

1.함수는 반복적으로 사용되는 코드 블록에 이름을 붙여놓은 형태이다.
2.함수를 한번 정의해두면 지정해둔 함수 이름을 통해 언제든 해당 코드 블록을 재사용할 수 있다.
3.함수를 정의할 때는 def라는 키워드를 사용한다.
4.정의해둔 함수를 사용하는 것을 호출(call)이라고 부른다.
5.파이썬에서는 함수를 호출하려면 반드시 호출문 위에 함수가 먼저 정의되어 있어야한다.
'''

# 함수의 정의 
def calc_sum(x):
    sum =0
    for n in range(1, x+1):
        sum += n 
    return sum
    
# 함수의 호출
print("-" * 40)
print('1~5까지의 합계 : ', calc_sum(5)) # 1~5까지의 합계 :  15
print("1~10까지의 합계 : ", calc_sum(10)) # 1~10까지의 합계 :  55

print("-" * 40)
result = calc_sum(5)
print(result) 


#---------내장함수 len를 직접 함수로 짜서 만들어보자 -------------
print("-" * 40)


def length(x):
    count = 0
    for n in x :
        count += 1
    return count

print("-" * 40)
li = [1, 2, 3, 4, 5]
print(len(li))  # 5
print(length(li))  # 5

s = "hello python"
print(len(s)) # 12
print(length(s)) # 12

 

인수(arguments)

'''
인수 (arguments)

-인수는 함수를 호출할 때 함수 실행에 필요한 값들을 전달하는 매개체이며, 
그렇기 때문에 매개 변수(parameter)라고도 부른다.

-함수 호출부에서 어떤 인수값을 전달하느냐에 따라 함수의 실행 결과가 달라진다.

-인수의 개수는 제한이 없어 많은 값을 함수에 전달할 수도 있고, 하나도 전달하지 않을수도 있다.

-함수를 정의할때 지정한 인수의 수만큼 호출할 때도 동일한 수의 인수값을 전달해야한다.

-인수의 이름을 지어줄 때는 사용하는 사람도 인수 이름만 보고 무슨 값을 전달해야 할지 의미를 알기 쉽게 지정해야한다.


'''

def get_item(a, b):
    
    w = "%s 무기를 획득했다." % a
    ar = "%s 방어구를 획득했습니다." % b
    detail = w +"\n" + ar
    return detail   

print(get_item('창', '방패'))
#창 무기를 획득했다.
#방패 방어구를 획득했습니다.

#인수를 전달받지 않는 함수 예
def calc_sum10():
    sum = 0
    for n in range(1, 11):
        sum += n
    return sum  

print(calc_sum10()) #55

# 계속~게시판에 30개씩 가져오고 싶을때 이렇게 쓰면된다.

 

반환값

'''

모든 함수가 반환값이 반드시 필요한 것은 아니다.
함수 실행을 후에 딱히 반환할 데이터가 없다면 return을 사용하지 않아도 된다.

'''
def multi(n1, n2):
    result = n1 * n2
    print("%d x %d = %d" % (n1, n2, result))
    
a = multi(3, 8) 
print(multi(7, 9)) # 7x9는 위에서 나온값이고 print는 None값이 출력된거다. return값이 업으므로.



'''
- 위 예제의 multi함수는 곱셈의 값을 구해서 호출부로 전달해주는 게 아니라 직접 곱셈을 수행하여 결과를 
  콘솔창에 출력하는 함수이다.
- 함수 내부에서 모든 로직한 후 반환값이 없기 때문에 return을 사용하지 않는다.
- 반환값이 없는 함수는 동작만 처리할 뿐 값이 아니기 때문에 다른 변수에 대입하거나
  수식 내에서 사용할 수 없고 단독으로 호출해서 사용해야한다.
'''

'''

-함수의 반환값은 오직 하나다.
-다만 파이썬에서는 특별하게 return키워드 뒤에 반환값을 콤마로 여러 개 나열할 수 있다.
-이런 경우에는 리턴값이 여러 개가 되는 것이 아니라 해당 값들을 하나의 튜플로 묶어서 반환한다.
'''

def sum_multi(n1, n2):
    add_res = add(n1, n2)
    mul_res = n1 * n2
    return add_res, mul_res

x = sum_multi(5, 5)
print(type(x)) #<class 'tuple'>
print(x) # (10, 25)  값이 2개 나온게 아니라 하나의 튜플로 나온거다. ()는 생략된거다. 원래생략 가능


'''

- 모든 함수는 함수 정의부에서 return키워드를 만나는 순간 함수가 강제로 종료된다.
-마치 반복문이 break를 만나면 반복문을 강제로 종료하는 것과 비슷한 원리이다.
- 함수안에선 break를 사용할수 없다. return을 써야한다.
'''
------------------------결과-----------------------------

20 8
3 x 8 = 24
7 x 9 = 63
None
<class 'tuple'>
(10, 25)
done.

 

퀴즈

'''
퀴즈 하기전에 알아둬야하는 내장함수

내장함수 map()
-map은 첫번째 인수로 타입을 적어주고, 두번째 인수로 문자열을 리스트를 적으면 
 해당 리스트 내부에 값을 일괄적으로 첫번째 인수의 타입으로 변환한
  map구조의 데이터를 리턴한다.
'''

li = [1, 2, 3]
n1, n2, n3 = li # n1 = li[0] 할 필요없이 이렇게 가능.
print(n1, n2, n3)

print("------------------------------------")

n1, n2 = map(int, input('정수 :').split())

print(n1, n2)

'''
퀴즈

1. 3개의 정수를 입력받아라
2. 3개의 정수 중 가장 큰값을 반환하는 함수 max_of_three를 정의하라.
3. 3개의 정수 중 가장 작은값을 반환하는 함수 min_of_three를 정의하라.
4. 반환값을 통해 출력하라.
출력 예시 : "n1, n2, n3중 최대값: ??"

'''
def max_num(n1, n2, n3):
    max_number = max(n1, n2, n3)
    return max_number 

def min_num(n1, n2, n3):
    min_number = min(n1, n2, n3)
    return min_number 

n1, n2, n3 = map(int, input("정수 : ").split())

print("가장 큰 정수는 %d 입니다. " % max_num(n1,n2,n3))
print("가장 작은 정수는 %d 입니다. " %min_num(n1,n2,n3))

퀴즈 2

'''
1. 실수형태로 입력받은 키(cm)와 몸무게(kg)을 인수로 전달받아
2. bmi지수를 계산하여 반환함과 동시에 
3. bmi가 25.0이상이면 "당신은 과체중입니다."
   18.5이하면 "당신은 저체중입니다."
   나머지는 "당신은 정상체중입니다."를 출력하는
   Calc_BMI라는 함수를 정의하고 호출하세요.
# bmi 계산식 : 몸무게(kg) / (키(m) * 키(m))
#출력예시:
"키 -> 178.4cm, 체중-> 78.2kg의 체질량지수는 : 24.57입니다."

'''

def Cale_BMI(cm, kg):
    
    m = float(cm) / 100
    kg = float(kg)
    
    bmi = kg / (m * m)
    
    if bmi >= 25.0:
        print("당신은 과체중입니다.")
    elif bmi <= 18.5:
        print("당신은 저체중입니다.")
    else:
        print("당신은 정상체중입니다.")
    return bmi