포스트

[Python 100일 챌린지] Day 25 - 함수 매개변수와 반환값

[Python 100일 챌린지] Day 25 - 함수 매개변수와 반환값

Day 24에서 함수 정의는 배웠는데, 매번 같은 값만 출력하면 의미 없죠? 🤔 ──이제 “값을 넣으면 다른 결과가 나오는” 진짜 유용한 함수를 만들 차례입니다! 😊

계산기 함수에 5와 3을 넣으면 8이 나오고, 인사 함수에 “홍길동”을 넣으면 “홍길동님, 안녕하세요!”가 나오는 것처럼!

매개변수로 입력을 받고, return으로 결과를 돌려주는 것. 이것이 함수의 진짜 파워입니다! 💡

(35분 완독 ⭐⭐⭐)

🎯 오늘의 학습 목표

  1. 매개변수와 인자의 차이 이해하기
  2. 위치 인자로 값 전달하기
  3. 키워드 인자로 명확하게 전달하기
  4. return으로 값 반환하기
  5. 여러 값 동시에 반환하기
  6. print vs return 완벽 이해하기

📚 사전 지식

🎯 학습 목표 1: 매개변수와 인자의 차이 이해하기

매개변수의 개념

매개변수(Parameter)는 함수가 작업을 수행하는 데 필요한 입력값을 받는 변수입니다.

실생활 비유:

1
2
3
4
5
🧮 계산기 = 함수

"5와 3을 더해줘" → 5와 3이 입력값 (매개변수)
계산기가 작업 수행
"8입니다" → 결과 (반환값)

매개변수 vs 인자

1
2
3
4
def greet(name):  # name = 매개변수 (Parameter)
    print(f"안녕하세요, {name}님!")

greet("홍길동")  # "홍길동" = 인자 (Argument)

차이점:

  • 매개변수 (Parameter): 함수 정의할 때 괄호 안에 쓰는 변수
  • 인자 (Argument): 함수 호출할 때 실제로 전달하는 값

첫 번째 매개변수 사용하기

1
2
3
4
5
6
7
8
9
10
11
12
13
# 매개변수 없는 함수 (어제 배운 것)
def say_hello():
    print("안녕하세요!")

say_hello()  # 안녕하세요!

# 매개변수 있는 함수 (오늘 배울 것!)
def greet(name):
    print(f"안녕하세요, {name}님!")

greet("김철수")  # 안녕하세요, 김철수님!
greet("이영희")  # 안녕하세요, 이영희님!
greet("박민수")  # 안녕하세요, 박민수님!

실행 결과:

1
2
3
4
안녕하세요!
안녕하세요, 김철수님!
안녕하세요, 이영희님!
안녕하세요, 박민수님!

🎯 학습 목표 2: 위치 인자 사용하기

예제 1: 숫자 출력하기

1
2
3
4
5
6
7
8
9
10
def print_number(num):
    """받은 숫자를 출력하는 함수"""
    print(f"받은 숫자: {num}")
    print(f"숫자의 2배: {num * 2}")
    print(f"숫자의 제곱: {num ** 2}")

# 여러 번 호출 가능
print_number(5)
print()
print_number(10)

실행 결과:

1
2
3
4
5
6
7
받은 숫자: 5
숫자의 2배: 10
숫자의 제곱: 25

받은 숫자: 10
숫자의 2배: 20
숫자의 제곱: 100

예제 2: 문자열 조작하기

1
2
3
4
5
6
7
8
9
10
def make_uppercase(text):
    """문자열을 대문자로 변환하여 출력"""
    upper_text = text.upper()
    print(f"원본: {text}")
    print(f"대문자: {upper_text}")
    print(f"길이: {len(text)}글자")

make_uppercase("hello")
print()
make_uppercase("python")

실행 결과:

1
2
3
4
5
6
7
원본: hello
대문자: HELLO
길이: 5글자

원본: python
대문자: PYTHON
길이: 6글자

🎯 학습 목표 3: 키워드 인자로 명확하게 전달하기

두 개의 매개변수

1
2
3
4
5
6
7
8
def add(a, b):
    """두 숫자를 더하여 출력"""
    result = a + b
    print(f"{a} + {b} = {result}")

add(5, 3)    # 5 + 3 = 8
add(10, 20)  # 10 + 20 = 30
add(7, 15)   # 7 + 15 = 22

중요: 매개변수의 순서가 중요합니다!

1
2
3
4
5
def introduce(name, age):
    print(f"이름: {name}, 나이: {age}")

introduce("홍길동", 25)  # 이름: 홍길동, 나이: 25세
introduce(25, "홍길동")  # 이름: 25, 나이: 홍길동세 (잘못됨!)

세 개 이상의 매개변수

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def calculate(a, b, operator):
    """세 개의 매개변수를 받는 계산 함수"""
    print(f"계산: {a} {operator} {b}")

    if operator == "+":
        result = a + b
    elif operator == "-":
        result = a - b
    elif operator == "*":
        result = a * b
    elif operator == "/":
        result = a / b if b != 0 else "오류: 0으로 나눌 수 없음"
    else:
        result = "오류: 알 수 없는 연산자"

    print(f"결과: {result}")

# 다양한 연산 수행
calculate(10, 5, "+")   # 10 + 5 = 15
calculate(10, 5, "-")   # 10 - 5 = 5
calculate(10, 5, "*")   # 10 * 5 = 50
calculate(10, 5, "/")   # 10 / 5 = 2.0

실전 예제: 학생 정보 출력

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def print_student_info(name, age, grade, major):
    """학생 정보를 형식에 맞춰 출력"""
    print("="*40)
    print("학생 정보".center(40))
    print("="*40)
    print(f"이름    : {name}")
    print(f"나이    : {age}")
    print(f"학년    : {grade}학년")
    print(f"전공    : {major}")
    print("="*40)

# 사용
print_student_info("김철수", 21, 3, "컴퓨터공학")
print()
print_student_info("이영희", 20, 2, "경영학")

🎯 학습 목표 4: return으로 값 반환하기

return의 필요성

지금까지는 함수가 값을 출력만 했습니다. 하지만 실제로는 값을 반환해서 다른 곳에서 사용하는 것이 더 유용합니다!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# ❌ print만 사용 - 값을 재사용할 수 없음
def add_print(a, b):
    print(a + b)

result = add_print(5, 3)  # 8 출력됨
print(type(result))       # <class 'NoneType'>
print(result)             # None
# print(result * 2)       # 오류! None은 계산 불가

# ✅ return 사용 - 값을 재사용 가능!
def add_return(a, b):
    return a + b

result = add_return(5, 3)  # 값이 변수에 저장됨
print(result)              # 8
print(result * 2)          # 16 (재사용 가능!)
print(result + 10)         # 18

return 기본 문법

1
2
3
def 함수이름(매개변수):
    # 작업 수행
    return 반환값  # 이 값이 함수 호출한 곳으로 돌아감

기본 return 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def get_sum(a, b):
    """두 숫자의 합을 반환"""
    total = a + b
    return total  # total 값을 반환

# 반환값을 변수에 저장
result = get_sum(10, 20)
print(f"결과: {result}")  # 결과: 30

# 반환값을 바로 사용
print(f"합계의 2배: {get_sum(5, 3) * 2}")  # 합계의 2배: 16

# 반환값을 다른 함수의 인자로 사용
sum1 = get_sum(5, 3)   # 8
sum2 = get_sum(10, 2)  # 12
total = get_sum(sum1, sum2)  # 8 + 12 = 20
print(f"전체 합계: {total}")

return의 특징

1. 함수를 즉시 종료합니다

1
2
3
4
5
6
7
8
9
10
11
def check_positive(num):
    """양수인지 확인하는 함수"""
    if num <= 0:
        return False  # 여기서 함수 종료
        print("이 줄은 실행되지 않습니다")

    # 양수일 때만 여기까지 실행됨
    return True

print(check_positive(-5))  # False
print(check_positive(10))  # True

2. return 없으면 None 반환

1
2
3
4
5
def no_return():
    print("반환값이 없는 함수")

result = no_return()
print(f"반환값: {result}")  # 반환값: None

3. 여러 곳에서 return 가능 (Early Return 패턴)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def get_grade(score):
    """점수에 따른 학점 반환"""
    if score >= 90:
        return "A"
    elif score >= 80:
        return "B"
    elif score >= 70:
        return "C"
    elif score >= 60:
        return "D"
    else:
        return "F"

print(get_grade(95))  # A
print(get_grade(75))  # C
print(get_grade(50))  # F

🎯 학습 목표 5: 여러 값 동시에 반환하기

Python에서는 여러 값을 동시에 반환할 수 있습니다!

기본 문법

1
2
3
4
5
6
7
8
9
10
def get_name_and_age():
    """이름과 나이를 반환"""
    name = "홍길동"
    age = 25
    return name, age  # 쉼표로 구분하여 여러 값 반환

# 반환값 받기
result_name, result_age = get_name_and_age()
print(f"이름: {result_name}")  # 이름: 홍길동
print(f"나이: {result_age}")   # 나이: 25

실전 예제 1: 사칙연산 결과 모두 반환

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def calculate_all(a, b):
    """두 숫자의 사칙연산 결과를 모두 반환"""
    add_result = a + b
    sub_result = a - b
    mul_result = a * b
    div_result = a / b if b != 0 else None

    return add_result, sub_result, mul_result, div_result

# 반환값 받기
add, sub, mul, div = calculate_all(10, 5)

print(f"덧셈: {add}")   # 덧셈: 15
print(f"뺄셈: {sub}")   # 뺄셈: 5
print(f"곱셈: {mul}")   # 곱셈: 50
print(f"나눗셈: {div}") # 나눗셈: 2.0

실전 예제 2: 통계 정보 반환

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def get_statistics(numbers):
    """리스트의 통계 정보를 반환"""
    if not numbers:
        return None, None, None, None

    total = sum(numbers)
    average = total / len(numbers)
    maximum = max(numbers)
    minimum = min(numbers)

    return total, average, maximum, minimum

# 사용
scores = [85, 92, 78, 95, 88, 91]
total, avg, max_score, min_score = get_statistics(scores)

print("📊 성적 통계")
print(f"총점: {total}")
print(f"평균: {avg:.2f}")
print(f"최고점: {max_score}")
print(f"최저점: {min_score}")

실행 결과:

1
2
3
4
5
📊 성적 통계
총점: 529점
평균: 88.17점
최고점: 95점
최저점: 78점

튜플로 받기

여러 값을 반환하면 실제로는 튜플로 반환됩니다:

1
2
3
4
5
6
7
8
9
10
11
12
def get_info():
    return "홍길동", 25, "서울"

# 방법 1: 각각 받기
name, age, city = get_info()

# 방법 2: 튜플로 받기
info = get_info()
print(info)        # ('홍길동', 25, '서울')
print(info[0])     # 홍길동
print(info[1])     # 25
print(info[2])     # 서울

🎯 학습 목표 6: print vs return 완벽 이해하기

차이점 이해하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 1. print 사용 함수
def add_with_print(a, b):
    result = a + b
    print(result)  # 화면에 출력만 함

# 2. return 사용 함수
def add_with_return(a, b):
    result = a + b
    return result  # 값을 반환함

# 비교
print("=== print 사용 ===")
x = add_with_print(5, 3)  # 8 출력됨
print(f"반환값: {x}")      # 반환값: None
# print(x * 2)            # 오류! None은 계산 불가

print("\n=== return 사용 ===")
y = add_with_return(5, 3)  # 출력 안 됨
print(f"반환값: {y}")       # 반환값: 8
print(f"2배: {y * 2}")      # 2배: 16 (재사용 가능!)

실행 결과:

1
2
3
4
5
6
7
=== print 사용 ===
8
반환값: None

=== return 사용 ===
반환값: 8
2배: 16

언제 무엇을 사용할까?

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
# ✅ print 사용: 단순히 보여주기만 하면 될 때
def show_welcome_message():
    """환영 메시지 출력"""
    print("="*30)
    print("Python 학습 프로그램")
    print("="*30)

show_welcome_message()

# ✅ return 사용: 계산 결과를 다른 곳에서 사용할 때
def calculate_tax(price):
    """세금 계산"""
    return price * 0.1

price = 10000
tax = calculate_tax(price)
total = price + tax
print(f"총액: {total}")

# ✅ 둘 다 사용: 정보도 보여주고 값도 반환
def calculate_and_show(a, b):
    """계산하고 결과도 보여줌"""
    result = a + b
    print(f"계산 중: {a} + {b} = {result}")  # 정보 출력
    return result  # 값도 반환

total = calculate_and_show(10, 20)  # 계산 중: 10 + 20 = 30
print(f"반환값 사용: {total * 2}")   # 반환값 사용: 60

💻 실전 활용 예제

예제 1: 온도 변환기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def celsius_to_fahrenheit(celsius):
    """섭씨를 화씨로 변환"""
    fahrenheit = (celsius * 9/5) + 32
    return fahrenheit

def fahrenheit_to_celsius(fahrenheit):
    """화씨를 섭씨로 변환"""
    celsius = (fahrenheit - 32) * 5/9
    return celsius

# 사용
print("🌡️ 온도 변환기")
c_temp = 25
f_temp = celsius_to_fahrenheit(c_temp)
print(f"{c_temp}°C = {f_temp}°F")

f_temp = 77
c_temp = fahrenheit_to_celsius(f_temp)
print(f"{f_temp}°F = {c_temp:.1f}°C")

예제 2: 문자열 분석기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def analyze_string(text):
    """문자열 분석 정보 반환"""
    length = len(text)
    upper_count = sum(1 for c in text if c.isupper())
    lower_count = sum(1 for c in text if c.islower())
    digit_count = sum(1 for c in text if c.isdigit())
    space_count = text.count(' ')

    return length, upper_count, lower_count, digit_count, space_count

# 사용
text = "Hello World 2024"
length, upper, lower, digit, space = analyze_string(text)

print(f"문자열: '{text}'")
print(f"총 길이: {length}")
print(f"대문자: {upper}")
print(f"소문자: {lower}")
print(f"숫자: {digit}")
print(f"공백: {space}")

예제 3: 학점 계산기

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
def calculate_grade(scores):
    """점수 리스트를 받아 평균과 학점 반환"""
    if not scores:
        return 0, "N/A"

    average = sum(scores) / len(scores)

    if average >= 90:
        grade = "A"
    elif average >= 80:
        grade = "B"
    elif average >= 70:
        grade = "C"
    elif average >= 60:
        grade = "D"
    else:
        grade = "F"

    return average, grade

# 사용
student_scores = [85, 92, 78, 95, 88]
avg, grade = calculate_grade(student_scores)

print(f"과목 점수: {student_scores}")
print(f"평균: {avg:.2f}")
print(f"학점: {grade}")

예제 4: BMI 계산기

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
42
def calculate_bmi(weight, height):
    """BMI를 계산하고 판정 결과 반환

    Args:
        weight: 체중(kg)
        height: 키(cm)

    Returns:
        bmi: BMI 지수
        status: 판정 결과
    """
    # 키를 미터로 변환
    height_m = height / 100

    # BMI 계산
    bmi = weight / (height_m ** 2)

    # 판정
    if bmi < 18.5:
        status = "저체중"
    elif bmi < 23:
        status = "정상"
    elif bmi < 25:
        status = "과체중"
    elif bmi < 30:
        status = "비만"
    else:
        status = "고도비만"

    return bmi, status

# 사용
weight = 70  # kg
height = 175  # cm

bmi, status = calculate_bmi(weight, height)

print("💪 BMI 계산 결과")
print(f"키: {height}cm")
print(f"체중: {weight}kg")
print(f"BMI: {bmi:.2f}")
print(f"판정: {status}")

💡 실전 팁 & 주의사항

💡 Tip 1: 매개변수 개수 일치시키기

함수를 호출할 때는 정의된 매개변수 개수와 정확히 일치하는 인자를 전달해야 합니다.

1
2
3
4
5
6
7
8
9
10
11
def greet(name, age):
    print(f"{name}님, {age}세 환영합니다!")

# ✅ 올바른 사용
greet("철수", 25)

# ❌ 인자 부족
# greet("철수")  # TypeError

# ❌ 인자 초과
# greet("철수", 25, "서울")  # TypeError

💡 Tip 2: 의미 있는 매개변수 이름 사용하기

매개변수 이름은 용도를 명확히 알 수 있게 작성하세요.

1
2
3
4
5
6
7
# ❌ 나쁜 예시
def calc(a, b):
    return a * b / 100

# ✅ 좋은 예시
def calculate_discount(price, discount_rate):
    return price * discount_rate / 100

💡 Tip 3: return은 함수를 즉시 종료합니다

return 이후의 코드는 실행되지 않으므로 주의하세요.

1
2
3
4
5
6
7
def example():
    print("1번 출력")
    return "결과"
    print("2번 출력")  # 이 줄은 실행 안 됨!

result = example()
# 출력: 1번 출력 (2번은 출력 안 됨)

💡 Tip 4: 여러 값 반환 시 언패킹 활용

여러 값을 반환받을 때는 필요한 만큼만 받을 수 있습니다.

1
2
3
4
5
6
7
8
9
def get_info():
    return "홍길동", 25, "서울"

# 방법 1: 모두 받기
name, age, city = get_info()

# 방법 2: 튜플로 받기
info = get_info()
print(info[0])  # 홍길동

💡 Tip 5: None 반환 이해하기

return이 없는 함수는 자동으로 None을 반환합니다.

1
2
3
4
5
def no_return():
    print("출력만 함")

result = no_return()
print(result)  # None

💡 Tip 6: print와 return 구분하기

print는 보여주기만, return은 값을 돌려줍니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# print 사용
def add_print(a, b):
    print(a + b)  # 출력만

result = add_print(5, 3)  # 8 출력
print(result)  # None

# return 사용
def add_return(a, b):
    return a + b  # 값 반환

result = add_return(5, 3)  # 출력 안 됨
print(result)  # 8
print(result * 2)  # 16 (재사용 가능!)

💡 Tip 7: Early Return 패턴 (조기 반환)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def process_age(age):
    """나이에 따른 분류 (Early Return 패턴)"""
    # 잘못된 입력 처리
    if age < 0:
        return "오류: 잘못된 나이"

    # 각 조건에서 바로 반환
    if age < 18:
        return "미성년자"
    if age < 65:
        return "성인"
    return "노인"

# 테스트
print(process_age(-5))   # 오류: 잘못된 나이
print(process_age(15))   # 미성년자
print(process_age(30))   # 성인
print(process_age(70))   # 노인

💡 Tip 8: Guard Clause 패턴 (가드 절)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def safe_divide(a, b):
    """안전한 나눗셈 (Guard Clause 패턴)"""
    # 예외 상황을 먼저 처리
    if b == 0:
        return None

    # 정상 로직
    return a / b

# 사용
result = safe_divide(10, 2)
if result is not None:
    print(f"결과: {result}")
else:
    print("오류: 0으로 나눌 수 없습니다")

💡 Tip 9: 입력 검증 후 처리 패턴

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def validate_and_calculate(numbers):
    """입력 검증 후 계산"""
    # 검증
    if not numbers:
        return 0, "입력 없음"

    if not all(isinstance(n, (int, float)) for n in numbers):
        return 0, "잘못된 입력"

    # 계산
    total = sum(numbers)
    average = total / len(numbers)

    return average, "성공"

# 테스트
avg, msg = validate_and_calculate([85, 90, 95])
print(f"평균: {avg}, 상태: {msg}")

avg, msg = validate_and_calculate([])
print(f"평균: {avg}, 상태: {msg}")

💡 Tip 10: 매개변수 개수 불일치 주의

1
2
3
4
5
6
7
8
9
10
11
def add(a, b):
    return a + b

# ❌ 오류: 인자 부족
# add(5)  # TypeError: missing 1 required positional argument

# ❌ 오류: 인자 초과
# add(5, 3, 2)  # TypeError: takes 2 positional arguments but 3 were given

# ✅ 올바름
result = add(5, 3)

💡 Tip 11: return 이후 코드는 실행 안 됨

1
2
3
4
5
6
def example():
    return "반환"
    print("이 코드는 실행되지 않습니다")  # Dead code

result = example()
# "이 코드는 실행되지 않습니다"는 출력 안 됨

💡 Tip 12: 반환값 무시하지 않기

1
2
3
4
5
6
7
8
9
10
11
12
def get_sum(a, b):
    return a + b

# ❌ 반환값을 받지 않음 - 아무 일도 안 일어남
get_sum(5, 3)

# ✅ 반환값을 변수에 저장하거나 바로 사용
result = get_sum(5, 3)
print(result)

# 또는
print(get_sum(5, 3))

🧪 연습 문제

문제 1: 원의 넓이 계산

원의 반지름을 받아 넓이를 반환하는 함수를 작성하세요.

  • 함수 이름: calculate_circle_area
  • 매개변수: radius (반지름)
  • 반환값: 넓이 (π × r²)
  • π는 3.14159 사용
💡 힌트
1
2
3
4
5
# 힌트:
# 1. def calculate_circle_area(radius):
# 2. PI = 3.14159
# 3. area = PI * radius ** 2
# 4. return area
✅ 정답
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def calculate_circle_area(radius):
    """원의 넓이를 계산하여 반환"""
    PI = 3.14159
    area = PI * radius ** 2
    return area

# 테스트
radius = 5
area = calculate_circle_area(radius)
print(f"반지름 {radius}cm인 원의 넓이: {area:.2f}cm²")

# 여러 반지름 테스트
for r in [1, 3, 5, 10]:
    a = calculate_circle_area(r)
    print(f"반지름 {r}cm → 넓이 {a:.2f}cm²")

실행 결과:

1
2
3
4
5
반지름 5cm인 원의 넓이: 78.54cm²
반지름 1cm → 넓이 3.14cm²
반지름 3cm → 넓이 28.27cm²
반지름 5cm → 넓이 78.54cm²
반지름 10cm → 넓이 314.16cm²

문제 2: 최댓값과 최솟값 찾기

세 개의 숫자를 받아 최댓값과 최솟값을 반환하는 함수를 작성하세요.

  • 함수 이름: find_max_min
  • 매개변수: a, b, c (세 개의 숫자)
  • 반환값: 최댓값, 최솟값 (두 개)
✅ 정답
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def find_max_min(a, b, c):
    """세 숫자 중 최댓값과 최솟값 반환"""
    maximum = max(a, b, c)
    minimum = min(a, b, c)
    return maximum, minimum

# 테스트
max_val, min_val = find_max_min(5, 12, 3)
print(f"숫자: 5, 12, 3")
print(f"최댓값: {max_val}")
print(f"최솟값: {min_val}")

# 다른 예제
max_val, min_val = find_max_min(100, 50, 75)
print(f"\n숫자: 100, 50, 75")
print(f"최댓값: {max_val}")
print(f"최솟값: {min_val}")

실행 결과:

1
2
3
4
5
6
7
숫자: 5, 12, 3
최댓값: 12
최솟값: 3

숫자: 100, 50, 75
최댓값: 100
최솟값: 50

문제 3: 짝수 홀수 판별기

숫자를 받아 짝수인지 홀수인지 판별하여 반환하는 함수를 작성하세요.

  • 함수 이름: check_even_odd
  • 매개변수: number
  • 반환값: “짝수” 또는 “홀수” (문자열)
✅ 정답
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def check_even_odd(number):
    """짝수/홀수 판별"""
    if number % 2 == 0:
        return "짝수"
    else:
        return "홀수"

# 더 간결한 버전
def check_even_odd_v2(number):
    """짝수/홀수 판별 (간결 버전)"""
    return "짝수" if number % 2 == 0 else "홀수"

# 테스트
for num in [1, 2, 3, 4, 5, 10, 15, 20]:
    result = check_even_odd(num)
    print(f"{num}은(는) {result}입니다")

실행 결과:

1
2
3
4
5
6
7
8
1은(는) 홀수입니다
2은(는) 짝수입니다
3은(는) 홀수입니다
4은(는) 짝수입니다
5은(는) 홀수입니다
10은(는) 짝수입니다
15은(는) 홀수입니다
20은(는) 짝수입니다

💬 자주 묻는 질문 (FAQ)

Q1. 매개변수와 인자의 차이는 무엇인가요?

A: 매개변수(Parameter)는 함수를 정의할 때 괄호 안에 쓰는 변수이고, 인자(Argument)는 함수를 호출할 때 실제로 전달하는 값입니다.

1
2
3
4
def greet(name):  # name = 매개변수 (Parameter)
    print(f"안녕, {name}!")

greet("철수")  # "철수" = 인자 (Argument)

Q2. return과 print의 차이는 무엇인가요?

A: print는 화면에 출력만 하고, return은 값을 반환하여 다른 곳에서 재사용할 수 있게 합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# print: 출력만, 재사용 불가
def add_print(a, b):
    print(a + b)

x = add_print(5, 3)  # 8 출력
print(x)  # None (재사용 불가)

# return: 값 반환, 재사용 가능
def add_return(a, b):
    return a + b

y = add_return(5, 3)  # 출력 안 됨
print(y)  # 8
print(y * 2)  # 16 (재사용 가능!)

Q3. 함수에 return이 없으면 어떻게 되나요?

A: return이 없는 함수는 자동으로 None을 반환합니다.

1
2
3
4
5
6
def no_return():
    print("이 함수는 출력만 합니다")

result = no_return()
print(result)  # None
print(type(result))  # <class 'NoneType'>

Q4. 여러 값을 반환하면 어떤 타입이 되나요?

A: 여러 값을 쉼표로 구분하여 반환하면 튜플(tuple) 타입으로 반환됩니다.

1
2
3
4
5
6
7
8
9
10
def get_info():
    return "홍길동", 25, "서울"

result = get_info()
print(type(result))  # <class 'tuple'>
print(result)  # ('홍길동', 25, '서울')

# 언패킹하여 받기
name, age, city = get_info()
print(name)  # 홍길동

Q5. return 이후의 코드는 실행되나요?

A: 아니요, 실행되지 않습니다. return은 함수를 즉시 종료시킵니다.

1
2
3
4
5
6
7
8
9
def example():
    print("1번 출력")
    return "결과"
    print("2번 출력")  # 이 줄은 절대 실행 안 됨! (Dead code)
    return "다른 결과"  # 이것도 실행 안 됨!

result = example()
# 출력: 1번 출력 (2번은 출력되지 않음)
print(result)  # 결과

Q6. 반환값을 꼭 변수에 저장해야 하나요?

A: 아니요, 필요에 따라 선택하면 됩니다. 바로 사용하거나, 변수에 저장하거나, 무시할 수도 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def add(a, b):
    return a + b

# 방법 1: 변수에 저장
result = add(5, 3)
print(result)

# 방법 2: 바로 사용
print(add(10, 20))

# 방법 3: 다른 함수의 인자로 사용
print(f"합계: {add(7, 8)}")

# 방법 4: 무시 (하지만 이러면 함수 호출 의미 없음)
add(1, 2)  # 반환값을 사용하지 않음

📝 오늘 배운 내용 정리

핵심 개념

  1. 매개변수 (Parameter)
    • 함수가 입력받는 변수
    • def func(param1, param2):
    • 여러 개 사용 가능
  2. 인자 (Argument)
    • 함수 호출 시 전달하는 실제 값
    • func(value1, value2)
  3. return 문
    • 함수의 결과값을 반환
    • 함수를 즉시 종료
    • 반환값을 변수에 저장하거나 바로 사용 가능
  4. 여러 값 반환
    • return val1, val2, val3
    • 튜플로 반환됨
    • 언패킹으로 받기: a, b, c = func()
  5. print vs return
    • print: 화면에 출력만 (재사용 불가)
    • return: 값을 반환 (재사용 가능)

🎯 실습 과제

다음 함수들을 작성해보세요:

과제 1: 할인 가격 계산기

1
2
3
4
5
6
7
8
9
10
"""
함수 이름: calculate_discount_price
매개변수: original_price (원가), discount_rate (할인율 %)
반환값: 할인된 가격

예시:
calculate_discount_price(10000, 20)  # 8000 반환
"""

# 여기에 코드를 작성하세요!

과제 2: 문자열 카운터

1
2
3
4
5
6
7
8
9
10
11
"""
함수 이름: count_characters
매개변수: text (문자열)
반환값: 문자 개수, 공백 개수, 숫자 개수 (3개)

예시:
chars, spaces, digits = count_characters("Hello 123")
# chars=8, spaces=1, digits=3
"""

# 여기에 코드를 작성하세요!

🔗 관련 자료


📚 이전 학습

Day 24: 함수 정의하기 (def) ⭐⭐⭐

함수의 기본 개념과 정의 방법, docstring 작성법을 배웠습니다!

📚 다음 학습

Day 26: 기본 매개변수와 키워드 인자 ⭐⭐⭐

내일은 더 유연한 함수를 만드는 방법을 배웁니다!


“늦었다고 생각할 때가 가장 빠른 시기입니다!” 🚀

Day 25/100 Phase 3: 제어문과 함수 #100DaysOfPython
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.