본문 바로가기

Python

11. 함수 (정의, 매개변수, for문에서의 이용)

1. 함수 정의

'''
# 함수란?
- 명령어 집단
- 명령어를 copy and paste 를 하여 재사용 하기 위함

# 함수의 종류
- 사용자정의 함수 : 함수 정의, 함수 호출
- 내장 함수 : 파이썬에서 제공하는 함수. 별도 import 구문 없음.
    ex) print(), input(), range() 등등...
- 외장 함수 : 별도 import 구문 필요로 함. 별도 설치가 필요할 수 있음(pip install 라이브러리명) : (프로그램이 무거워지기 때문에 필요에 의해서 설치한다.)

# 함수의 종류 - 매개변수(입력), 반환값(return)
- 매개변수 : 함수에 전달되는 변수 역할, 파라미터(parameter), 인자(argument)
            매개변수X, 매개변수 O, 매개변수 초기값, 가변 인자
- 반환값 : return 문 , 최종 결과값에 해당    

단계

#1 함수 정의
def 함수명(매개변수1, 매개변수2 ...) : 
    명령어
    return 변수|값|식

#2 함수 호출
함수명(데이터값1, 데이터값2 ...)

'''

 

2. 매개변수 이용한 함수

 

# 매개변수 X, 반환값(return) X
# 고객의 이름을 입력받은 후 인사말 출력

def greeting() : #함수명은 소문자 이용
    user_name = input('이름을 입력하세요...')
    print(f' {user_name} 고객님!!! 오늘도 좋은 하루 되세요~ ')
    print('='*20)
    
# 함수 호출
# greeting()
# greeting()

# 함수는 정의만 해선 아무 일도 생기지 않는다. 필요할 때 호출하자.

 

# 매개변수 O , 반환값(return) X
# 고객의 이름을 입력받은 후 인사말 출력

def greeting2(user_name) : #함수명은 소문자 이용
    print(f' {user_name} 고객님!!! 오늘도 좋은 하루 되세요~ ')
    print('='*20)
    
# 함수 호출
# greeting2() # TypeError
greeting2('고길동')
#  고길동 고객님!!! 오늘도 좋은 하루 되세요~ 

# 또는
user = input('이름을 입력하세요...')
greeting2(user)

결과)
이름을 입력하세요...최길동
 최길동 고객님!!! 오늘도 좋은 하루 되세요~

 

'''
Quiz

2개의 인자를 받아서 연산자(+,-,/,*,%)를 이용하여 연산결과 출력하기
사용자정의 함수
# 함수 호출
cal(10,3)

10+3 = 13
10-3 = 7
10*3 = 30
10/3 = 3.33
10%3 = 1

'''

 

def cal(x, y) :
    print(f'{x} + {y} = {x+y}')
    print(f'{x} - {y} = {x-y}')
    print(f'{x} * {y} = {x*y}')
    print(f'{x} / {y} = {x/y:.2f}')
    print(f'{x} % {y} = {x%y}')
    print('-'*10)

cal(10,3)

호출하면

10 + 3 = 13
10 - 3 = 7
10 * 3 = 30
10 / 3 = 3.33
10 % 3 = 1

 

Quiz
# 숫자값을 인자로 전달받아서 출력하는 구구단 함수를 정의한 후 호출하여라    

def gugu(k) :
    cnt = 1
    while cnt <= 9 :
        print(f'{k} X {cnt} = {k*(cnt)}')
        cnt += 1
   
gugu(9)

결과)
9 X 1 = 9
9 X 2 = 18
9 X 3 = 27
9 X 4 = 36
9 X 5 = 45
9 X 6 = 54
9 X 7 = 63
9 X 8 = 72
9 X 9 = 81

gugu(12)    

결과)
12 X 1 = 12
12 X 2 = 24
12 X 3 = 36
12 X 4 = 48
12 X 5 = 60
12 X 6 = 72
12 X 7 = 84
12 X 8 = 96
12 X 9 = 108

 

Quiz

#숫자만큼 다음과 같은 형태로 별모양을 출력하는 함수를 정의한 후 호출하여라

def starPrint(t) :
    cnt = 1
    while cnt <= t :
        print('*'*cnt)
        cnt += 1

starPrint(10)

결과)
*
**
***
****
*****
******
*******
********
*********
**********

starPrint(5)

결과)
*
**
***
****
*****

 

3. for 문과 enumerate(문자열|리스트|튜플)
'''
for idx, value in enumerate(문자열|리스트|튜플)
    idx, value를 이용한 명령문
    
즉, enumerate 는 안에 있는 값을 인덱스와 벨류값으로 표현


예제1)

my_list = ["a", "b", "c"]
for index, value in enumerate(my_list):
    print(index, value)
결과)
  
0 a
1 b
2 c    

예제2)
    
my_text = '가나다라마바사'
for index, value in enumerate(my_text):
    print(index, value)
    
결과)

0 가
1 나
2 다
3 라
4 마
5 바
6 사

'''

 

4. for 문과 zip(문자열|리스트|튜플, 문자열|리스트|튜플)
# 위치인덱스가 같은 데이터를 묶어준다.
'''
`zip()` 함수는 무엇을 하는가? a

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
for num, char in zip(list1, list2):
    print(num, char)

    - a) 두 리스트의 요소를 병렬로 묶어준다.  
    - b) 두 리스트의 요소를 교차로 출력한다.
    - c) 첫 번째 리스트의 요소만 출력한다.
    - d) 두 번째 리스트의 요소만 출력한다.

즉, 같은 위치의 인덱스끼리 묶어주는 함수를 zip()함수라 한다.

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']


print(zip(list1, list2)) # 그냥 zip 해버리면 zip 객체가 만들어지므로 압축된 개념.
결과) <zip object at 0x00000245DD64B2C0> 


print(list(zip(list1, list2))) # 바깥쪽을 list로 만들면 결과값 만들어져서 나옴
결과) [(1, 'a'), (2, 'b'), (3, 'c')] => 리스트안의 튜플




'''

 

'''
Quiz. 아래와 같은 중첩 리스트 구조에서 데이타 모두의 합을 구하는 코드는?

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


'''
'''

Quiz) 아래와 같은 중첩 리스트 구조에서 데이타 모두의 합을 구하는 코드는?

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

#중첩 for문을 이용한 풀이

total = 0
for row in matrix:
    for num in row:
        total += num

print(total)

결과) 45



5. for 문과 튜플인덱스 변수 활용

total2 = 0
for i, j, k in matrix :
    total2 += (i+j+k)
print(total2)

결과) 45

'''

 

'''
Quiz. BMI(체질량지수)를 계산하고, 결과에 따라 메시지를 출력하는 함수 코드는?

# BMI 계산: 체중(kg) / (신장(m) ** 2)
# BMI 지수에 따른 메세지 
bmi < 18.5 => 저체중
18.5 <= bmi < 24.9 => 정상 체중
25 <= bmi < 29.9 => 과체중
bmi >= 29.9 => 비만 

# 함수 호출 사용 예시
weight = 70  # 체중 (kg)
height = 1.75  # 신장 (m)
calculate_bmi(weight, height)

#1) 함수 정의
def calculate_bmi(weight, height) :
    #2) bmi 지수 구하기
    # 체중(kg) / 신장(m)**2
    bmi = weight/(height**2)
    #3) bmi 값에 따른 메세지 출력
    if bmi < 18.5 : msg = '저체중'
    elif 18.5 <= bmi < 24.9 : msg = '정상체중'
    elif 25 <= bmi < 29.9 : msg = '과체중'
    elif bmi >= 29.9 : msg = '비만'
    else : msg = '오류'
#4) 결과 출력
    print(f" weight:{weight}kg , height: {height}m , BMI: {bmi:.2f} , 상태: {msg}")
#5) 함수 호출
weight = 70
height = 1.75
calculate_bmi(weight, height)

결과) weight:70kg , height: 1.75m , BMI: 22.86 , 상태: 정상체중