24.07.12 Day10

최지원·2024년 8월 12일

함수

일련의 코드 블록을 수행하고 값을 반환하는 코드 블록의 단위

  • 내장함수
    • 파이썬 인터프리터에 미리 정의되어 있고, import 구문 없이 바로 사용 가능
    • 파이썬에 기본적으로 내장되어 있으므로 별도의 라이브러리 설치 필요 없음
    • 수학 연산, 문자열 처리, 리스트/딕셔너리 조작, 파일 처리, 입출력 등 다양한 기능 제공
    • 예) abs(), len(), print(), range()
    • 공식 문서: https://docs.python.org/ko/3/library/functions.html
    • 내장 함수 전부 보기:
  • 외장함수
    • 파이썬 모듈에서 제공하는 함수로 설치를 해야하며, 설치 후 해당 모듈을 불러와야 사용 가능함
    • 대표적인 라이브러리로는 NumPy, Pandas, Matplotlib 등이 있음
    • 내장함수보다 다양한 기능을 제공하며, 더 복잡한 기능을 구현할 수 있음
    • 개발자가 직접 기능을 구현할 필요 없이 라이브러리에서 제공하는 함수를 사용 가능

연습문제

# 문제1
# 사용자로부터 두 정수 입력 받기
num1 = int(input("첫 번째 정수를 입력하세요: "))
num2 = int(input("두 번째 정수를 입력하세요: "))

# 두 정수의 차이의 절댓값 계산
difference = abs(num1 - num2)

# 결과 출력
print(f"두 정수의 차이의 절댓값은 {difference}입니다.")
# 문제2
# 1부터 10까지의 정수 출력
for num in range(10, 31):
    print(num)
# 문제3
# 사용자로부터 문자열 입력 받기
input_string = input("문자열을 입력하세요: ")

# 문자열의 길이 계산
length = len(input_string)

# 결과 출력
print(f"입력한 문자열의 길이는 {length}입니다.")
# 문제4
# 1부터 5까지의 정수를 포함하는 리스트 생성
num_list = list(range(1, 6))

# 리스트 출력
print(num_list)
# 문제5
# 사용자로부터 3개의 정수 입력 받기
num1 = int(input("첫 번째 정수를 입력하세요: "))
num2 = int(input("두 번째 정수를 입력하세요: "))
num3 = int(input("세 번째 정수를 입력하세요: "))

# 튜플 생성
my_tuple = (num1, num2, num3)

# 튜플 출력
print(f"생성한 튜플: {my_tuple}")

구조

    def 함수이름(매개변수):
        실행할 코드
        return 반환값
    print('hello')
# return 값을 받고, 변수에 할당하면 그 값을 재사용할 수 있음.
# return 유무에 따라 실행 결과가 달라짐.

def adding(num1, num2):
    result = num1 + num2
    return result # 만약 코드에서 제거하면 이 셀은 에러가 발생함.
    # 밖으로 꺼내주는 것이 없기 때문에 없을 경우 none값이 들어감

result1 = adding(20, 50)

result2 = adding(200, 500)

result3 = adding(2000, 5000)

print(result1)
print(result2)
print(result3)
print(result1 + result2 + result3)

문자열의 각 단어를 대문자로 변환하는 함수1
문자열 클래스와 method를 이용한 예시

def capitalize_words(string):
    # 빈리스트, 어떠한 값을 넣겠다.
    new_list = []
    # 띄어쓰기를 가지고 string 쪼개기
    # 나눈 string을 str_list로 받기
    str_list = string.split()

    # 처음에 hello가 들어가 for문 실행
    # 두번째에 world가 들어가서 for문 실행
    for word in str_list:
        # new_list 값을 result에 집어넣기
        new_list.append(word.capitalize())

    result = ' '.join(new_list)
    # 단어의 첫 글자 대문자로 변환
    return result

# 사용 예시
string1 = 'hello world'
print(string1)
print(capitalize_words(string1))

연습문제

# 문제1
def calculate(num1, num2, operator):
    if operator == '+':
        return num1 + num2
    elif operator == '-':
        return num1 - num2
    elif operator == '*':
        return num1 * num2
    elif operator == '/':
        return num1 / num2
    else:
        return "잘못된 연산자 입력"
# 문제2
def calculate_sum(numbers):
    total = 0
    for num in numbers:
        total += num
    return total
# 문제3
def split_string(input_string, separator):
    return input_string.split(separator)
# 문제4
def concatenate_strings(string1, string2):
    return string1 + string2
# 문제5
def power(base, exponent):
    result = 1
    for _ in range(exponent):
        result *= base
    return result
# 문제6
def calculate_average(numbers):
    if not numbers:
        return 0
    total = sum(numbers)
    return total / len(numbers)
# 문제7
def repeat_string(input_string, times):
    return input_string * times
# 문제8
def sort_list(numbers):
    return sorted(numbers)

람다 함수

  • 이름 없이 정의된 작은 함수
  • lambda 키워드를 사용하는 정의
  • 간단한 로직을 수행하는 함수를 간결하게 작성할 때 유용
  • 구조 : lambda 매개변수 : 표현식

연습 문제

result = lambda num1, num2: num1 * num2

num1 = int(input("숫자1를 입력해주세요 : "))
num2 = int(input("숫자2를 입력해주세요 : "))
# 사용 예시
print(result(num1, num2))
max_num = lambda num1, num2 : num1 if num1 > num2 else num2

num1 = int(input("숫자1를 입력해주세요 : "))
num2 = int(input("숫자2를 입력해주세요 : "))

print(int(max_num(num1,num2)))
max_num = lambda n:max(num)

num = list(map(int,input().split()))

print('입력한 숫자',num)
print('최대값 : ',max_num(num))

함수 map()

# 문제1)
def calculate_squares(numbers):
    return list(map(lambda x: x ** 2, numbers))

user_input = input("숫자 리스트를 입력하세요 (공백으로 구분): ").split()
numbers = list(map(int, user_input))
squared_numbers = calculate_squares(numbers)
print("제곱 리스트:", squared_numbers)
# 문제2)
def calculate_string_lengths(strings):
    return list(map(len, strings))

input_strings = input("문자열 리스트를 입력하세요 (공백으로 구분): ").split()
lengths = calculate_string_lengths(input_strings)
print("문자열 길이 리스트:", lengths)
# 문제3)
def calculate_absolute_values(numbers):
    return list(map(abs, numbers))

user_input = input("숫자 리스트를 입력하세요 (공백으로 구분): ").split()
numbers = list(map(int, user_input))
absolute_values = calculate_absolute_values(numbers)
print("절대값 리스트:", absolute_values)
# 문제4)
def capitalize_strings(strings):
    return list(map(str.upper, strings))

input_strings = input("문자열 리스트를 입력하세요 (공백으로 구분): ").split()
capitalized_strings = capitalize_strings(input_strings)
print("대문자로 변환된 문자열 리스트:", capitalized_strings)
# 문제5)
def extract_even_numbers(numbers):
    return list(filter(lambda x: x % 2 == 0, numbers))

user_input = input("숫자 리스트를 입력하세요 (공백으로 구분): ").split()
numbers = list(map(int, user_input))
even_numbers = extract_even_numbers(numbers)
print("짝수 리스트:", even_numbers)

함수 filter()

# 예시2 - filter()을 이용하여 문자열 길이가 5 이상인 단어 필터링하기

# 문자열 리스트
words = ["apple", "banana", "cherry", "date", "elderberry", "fig"]


# 길이가 5 이상인 단어 여부를 판단하는 함수
def is_long_word(word):
    return len(word) >= 5

# filter() 함수를 사용하여 길이가 5 이상인 단어만 추출
long_words = list(filter(is_long_word, words))
print(long_words)


# 예시3 - 함수 filter()를 이용해 주어진 자료에서 소수 추출하기
# 소수: 1과 자신만으로 나누어 떨어지는 양의 정수

# 숫자 리스트
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
# numbers = [i for i in range(1,301)] # list comprehension을 이용하여 1부터 300까지의 숫자를 리스트에 담으세요

# 소수 여부를 판단하는 함수
def is_prime(x):
    if x < 2:
        return False
    for i in range(2, int(x**0.5) + 1):
        if x % i == 0:
            return False
    return True

# filter() 함수를 사용하여 소수만 추출
prime_numbers = list(filter(is_prime, numbers))
print(prime_numbers)

0개의 댓글