본문 바로가기
방구석코딩/파이썬 기초문법

[파이썬 독학] 데이터 분석 - 함수 만들기

by 석세상 2022. 6. 13.
반응형

함수의 정의

함수를 만들기 위해서는 먼저 함수가 무엇인지에 대해 알아야 한다. 함수란 각 집합의 원소를 다른 집합의 원소에 대응하는 것을 말한다. 조금 쉽게 이야기해보자면 1이란 값을 정해진 곳에 넣었을 때 항상 동일한 특정값이 생성되고 2란 값을 넣으면 2를 넣었을 때는 항상 동일한 특정값이 생성되는 것이다.

 

예를 들어보자면 'y = 2x + 1'이라는 함수가 있다고 하자. 그렇다면 x에 1이란 값을 넣으면 y에는 항상 3이라는 값이 생성되고, x에 2라는 값을 넣으면 y에 항상 5라는 값이 생성되는 것이다. 조금 더 쉽게 풀어보자면 어떤 값을 함수에 입력하면 해당하는 동일한 출력 값이 나오는 것을 말한다. 그렇다면 함수는 왜 사용할까?

 

 

1. 함수가 필요한 경우

프로그램 코딩을 하다 보면 동일한 내용을 또 코딩하는 경우가 생긴다. 이렇게 동일한 코딩이 여기저기서 사용되는 경우가 함수가 필요한 경우라고 할 수 있다.

 

 

2. 함수 문법 정의

함수는 def로 선언 후 함수명을 만든다. 이때 뒤에 소괄호를 쓰는데 이때 이 안에 값이 있는 함수와 값이 없는 함수, 크게 두 가지로 나눌 수 있다. 앞의 예시와 비교해보자면 괄호 안에 x라는 값이 들어가면 아래 수행할 문장들을 거쳐서 y의 값이 생성된다고 보면 된다.

def 함수명(x) :
    수행할 문장1
    수행할 문장2
    ....

 

값이 없는 함수 만들기

아래를 보면 def에 common()라는 함수를 만들었다.(정의했다라고도 한다.) 간단하게 아래 예제가 생과일주스를 만드는 매뉴얼이라고 하자. 그러면 딸바 주스를 만드는 과정이 다를 테고, 오렌지주스를 만드는 과정이 다른 부분도 있고 같은 부분도 있다. 오렌지 주스 만드는 과정의 3~5와 딸바 주스의 4~6번의 과정이 동일하다. 그리고 만약 생과일주스 종류가 많은데 각 만드는 과정이 앞부분은 달라도 맨뒤의 3단계는 모두 동일하다고 하자. 그렇다면 각 주스마다 만드는 방법은 다르지만 공통된 부분은 굳이 여러 번 반복해서 쓸 필요가 없는 것이다.

생과일주스 매뉴얼 [오렌지 주스 만드는 과정]
1. 오렌지를 깐다
2. 오렌지를 믹서기에 넣는다
3. 믹서기를 돌린다
4. 컵에 따른다
5. 주스생성완료

[딸바주스 만드는 과정]
1. 딸기 꼭지를 딴다
2. 바나나 껍질을 벗긴다
3. 딸기와 바나나를 믹서기에 넣는다
4. 믹서기를 돌린다
5. 컵에 따른다
6. 주스생성완료
함수를 이용한 코딩 [입력문]
def common() :                     # 함수생성
    print("믹서기를 돌린다")
    print("컵에 따른다")
    print("주스생성완료")
    print("")


# 오렌지주스
print("[오렌지 주스 만드는 과정]")
print("오렌지를 깐다")
print("오렌지를 믹서기에 넣는다")
common()  # 함수실행


# 딸바주스
print("[딸바주스 만드는 과정]")
print("딸기 꼭지를 딴다")
print("바나나 껍질을 벗긴다")
print("딸기와 바나나를 믹서기에 넣는다")

common()  # 함수실행


[출력결과]
[오렌지 주스 만드는 과정]
오렌지를 깐다
오렌지를 믹서기에 넣는다
믹서기를 돌린다
컵에 따른다
주스생성완료

[딸바주스 만드는 과정]
딸기 꼭지를 딴다
바나나 껍질을 벗긴다
딸기와 바나나를 믹서기에 넣는다
믹서기를 돌린다
컵에 따른다
주스생성완료

 

 

괄호 안에 값이 있는 함수 만들기

우리 생과일주스 중 딸바는 과일 투입량은 500g이 넘으면 너무 퍽퍽하고 500g 미만인 경우는 밍밍해서 항상 500g을 넣어야 하고 딸기와 바나나의 비율은 고객이 선택할 수 있다고 하자. 고객이 주문한 내용을 정확히 입력했는지, 과일은 총 500g은 제대로 넣었는지 체크하기 위해 함수를 이용해서 어떻게 만들 수 있을까? 

[함수생성]
def volumn (strawberry, banana) : 
    print("딸기 {0}g, 바나나 {1}g을 주문하였습니다".format(strawberry, banana))
    if strawberry + banana == 500 :
        print("과일이 적당히 투입되었습니다")
    elif strawberry + banana > 500 :
        print("과일을 너무 많이 투입하였습니다")
    else :
        print("과일이 부족합니다. 더 넣으세요")



[입력값] 1번 예제
volumn (200, 300)

[출력결과]
딸기 200g, 바나나 300g을 넣었습니다
과일이 적당히 투입되었습니다



[입력값] 2번 예제
volumn (300, 300)

[출력결과]
딸기 300g, 바나나 300g을 넣었습니다
과일을 너무 많이 투입하였습니다

1번 예제 결과를 보면 처음에 고객이 어떤 과일을 얼마나 주문했는지 보여준다. 다음으로 딸기와 바나나의 g이 500인지 체크한다. 1번 예제에서는 각 200g과 300g으로 총 500g을 주문했다. 따라서 '과일이 적당히 투입되었습니다'라는 결과가 나오게 된다. 2번 예제를 보면 딸기 300g, 바나나 300g을 주문했다는 안내와 함께 딸기와 바나나의 합이 500g인지 체크하게 된다, 이때 500g을 초과하여 '과일을 너무 많이 투입하였습니다'라는 결과를 보여주게 되는 것이다.

 

 

 

공부하는 내용이 진행될수록 과거에 했던 내용이 함께 나오게 된다. 이럴 때 앞에 부분의 잘 모르는 것이 있을 때 그냥 넘어왔다면 점점 앞으로 이해하기 힘들게 될 것이다. 디테일한 내용까지는 기억나지 않을 수 있지만 어떤 것들이 어떻게 작동하는지에 대해서는 명령어를 보면 생각날 수 있도록 숙지해야 할 것이다. 

 

 

728x90
반응형

댓글