https://school.programmers.co.kr/learn/courses/30/lessons/181893

 

문제 설명이 조금 이해하기 힘들어서 생각보다 시간이 소요된 문제였다.

query 배열을 순서대로 순회하면서, query[idx] 가 짝수인 경우 arr 배열에서 query[idx] 번째 인덱스 뒤의 요소들을 잘라서 버린다.

query[idx] 가 홀수인 경우, arr 배열에서 query[idx] 번째 인덱스 앞의 요소들을 잘라서 버린다.

지문에서 'query[i] 번 인덱스를 제외하고~' 라는 부분이 있어서 헷갈렸는데, 이 뜻은 arr 에서 요소를 제거할 때 query[i] 번째 요소는 남겨두라는 의미였다! 🥲

파이썬의 슬라이스를 사용하면 쉽게 풀 수 있다.

 

📝  내가 작성한 코드

def solution(arr, query):
    for idx, qry in enumerate(query):
        if idx % 2 == 0:
            arr = arr[:qry+1]
        elif idx % 2 != 0:
            arr = arr[qry:]
            
    return arr

https://school.programmers.co.kr/learn/courses/30/lessons/181871

 

문자열 myString 과 pat이 주어질 때, myString 에서 pat이 등장하는 횟수를 리턴하는 문제이다.

문자열 myString 만큼 for문을 돌고, 그 내부에서 myString 의 idx ~ 끝까지 반복하면서 문자열 temp를 만든다.

temp의 값이 pat 과 같아지면 answer +1 하고 반복문을 빠져나온다. 

 

📝  내가 작성한 코드

def solution(myString, pat):
    answer = 0
    for idx, str1 in enumerate(myString):
        temp = ""
        for str2 in myString[idx:]:
            temp += str2
            if temp == pat:
                answer += 1
                break
            
    return answer

'개발 > 코딩테스트' 카테고리의 다른 글

[프로그래머스] 모의고사  (0) 2024.02.22
[프로그래머스] 배열 조각하기  (0) 2024.02.15
[프로그래머스] 옹알이(2)  (0) 2024.02.13
[프로그래머스] 옹알이(1)  (0) 2024.02.07
[프로그래머스] OX 퀴즈  (1) 2024.02.07

혼공학습단 시작이 엊그제 같은데 벌써 마지막 주차가 되었습니다!

벌써 1월이 다 지나가 버렸다니🥲

그리고 파이썬 기본서 한 권을 다 봤다니! 뿌듯합니다 ㅎㅎ

배운 건 계속 써먹어 봐야 하니까 코딩테스트 문제도 요즘 파이썬으로 풀어보고 있어요! 😎


Chapter 07. 모듈

[외부 모듈]

 

✏️ 외부 모듈 : 파이썬이 기본적으로 제공하지 않는, 다른 사람들이 만들어 제공하는 모듈

# 설치 방법
pip install <모듈 이름>

 

[기본 미션 : p.431 [직접 해보는 손코딩:BeautifulSoup 스크레이핑 실행하기] 예제 실행 후 결과 화면 캡처하기]

 

✅ 소스 코드

# 모듈을 읽어 들입니다.
from flask import Flask
from urllib import request
from bs4 import BeautifulSoup

# 웹 서버를 생성합니다.
app = Flask(__name__)
@app.route("/")

def hello():
    # urlopen() 함수로 기상청의 전국 날씨를 읽습니다.
    target = request.urlopen("http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=108")
    # BeautifulSoup을 사용해 웹 페이지를 분석합니다.
    soup = BeautifulSoup(target, "html.parser")
    
    # location 태그를 찾습니다.
    output = ""
    for location in soup.select("location"):
        # 내부의 city, wf, tmn, tmx 태그를 찾아 출력합니다.
        output += "<h3>{}</h3>".format(location.select_one("city").string)
        output += "날씨: {}<br/>".format(location.select_one("wf").string)
        output += "최저/최고 기온: {}/{}"\
            .format(\
                location.select_one("tmn").string,\
                location.select_one("tmx").string\
                )        
        output += "<hr/>"
 
    return output

 

실행 화면


Chapter 08. 클래스

[클래스의 기본]

 

✏️ 객체 지향 프로그래밍 : 객체를 만들고, 객체들의 상호 작용을 중심으로 개발하는 방법론

✏️ 객체 (object) : 속성을 가질 수 있는 모든 것

# 예시 - 학생 객체
student1 = {"name": "kim", "math": 98, "english": 88, "science":95}
student2 = {"name": "Lee", "math": 92, "english": 81, "science":98}

 

✏️ 클래스 (class) : 객체를 효율적으로 생성하기 위해서 만들어진 구문

class 클래스 이름:
      클래스 내용

 

클래스는 생성자 함수(클래스 이름과 같은 함수) 를 사용해서 객체를 생성한다.

이러한 클래스를 기반으로 만들어 진 객체를 인스턴스 (instance) 라고 한다.

  •  붕어빵 틀과 붕어빵에 비유할 수 있다. 붕어빵 틀(클래스) 을 사용해서 실체화 된 붕어빵들이 바로 인스턴스이다.
# 인스턴스 생성
인스턴스 이름 = 클래스이름() 

 

학생 클래스를 정의한 후, 이를 기반으로 학생 3명을 선언하는 예제

# 클래스 선언
class Student:
    pass

# 학생 선언
student = Student()

# 학생 리스트 선언
students = [
    Student(),
    Student(),
    Student(),
]

 

✏️ 생성자 (constructor) : 클래스 이름과 같은 함수

  • 클래스 내부에 __init__ 라는 함수를 만들어서 객체를 생성할 때 처리할 내용을 작성할 수 있다.
  • 클래스 내부의 함수는 첫 번째 매개변수로 self 를 사용한다.
    • self가 가지고 있는 속성이나 기능에 접근할 때는 self.<식별자> 로 접근한다.
class 클래스 이름:
      def __init__(self, 추가적인 매개변수):
            작성할 코드

 

✏️ 메소드 (method) : 클래스가 가지고 있는 함수

class 클래스 이름:
      def 메소드 이름(self, 추가적인 매개변수):
            작성할 코드
# 클래스 선언
class Student:
    # 객체 생성 시 추가할 속성 정의
    def __init__(self, name, math, english, science):
        self.name = name
        self.math = math
        self.english = english
        self.science = science
    
    # Student 클래스의 메소드 get_sum() 정의
    def get_sum(self):
        return self.math+self.english+self.science
    
    def to_string(self):
        return "{}\t{}\t".format(self.name, self.get_sum())

# 학생 리스트 선언
students = [
    Student("kim", 97, 98, 88),
    Student("lee", 92, 98, 96),
    Student("bae", 76, 96, 94)
]

print("이름", "총점", sep="\t")
for student in students:
    print(student.to_string())
    
이름    총점
kim     283
lee     286
bae     266

 

https://school.programmers.co.kr/learn/courses/30/lessons/133499

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

✅이전에 풀었던 옹알이(1) 에서, "같은 발음을 연속해서 할 수 없다" 는 조건이 추가되었다.

✅ 주어진 문자 babb 에 같은 발음이 연속으로 있는 경우 해당 단어를 건너뛴다.

문자열 곱셈연산(word*2) 을 사용해서 같은 발음을 확인한다.

def solution(babbling):
	answer = 0
	words = ["aya", "ye", "woo", "ma"]
    
	for babb in babbling:
		for word in words:
			if word * 2 in babb:
				break
			babb = babb.replace(word, " ")

		if not babb.strip():
			answer += 1
	return answer

https://school.programmers.co.kr/learn/courses/30/lessons/120956

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

주어진 문자 babb에 아기가 발음할 수 있는 단어가 포함된 경우, 전부 공백으로 교체한다.

공백처리한 문자 babb에 있는 공백을 제거했을 때 빈 값이면 아기가 발음할 수 있는 단어이므로 answer + 1

파이썬에 빈 값은 false로 간주한다.

 

📝  내가 작성한 코드

def solution(babbling):
    answer = 0
    # 아기가 발음할 수 있는 단어 리스트
    words = ["aya", "ye", "woo", "ma"]

    for babb in babbling:
        for word in words:
            babb = babb.replace(word, ' ')
        if not babb.strip():
            answer += 1
            
    return answer

https://school.programmers.co.kr/learn/courses/30/lessons/120907

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문자열 계산식 ( X 연산자 Y = Z) 으로 이루어 진 배열에서, 주어진 식이 정답이면 "O" 를, 틀리면 "X" 를 순서대로 담은 배열을 리턴해 주는 문제이다.

계산식이 항상 "숫자 연산자 숫자 = 숫자" 로 주어진다.

따라서 "=" 를 기준으로 좌변과 우변을 나눠 준 후, 다시 좌변을 공백 기준으로 숫자, 연산자, 숫자로 분리한다.

✅ 이렇게 해서 좌변의 연산 결과를 구한 후, 우변과 같으면 "O" , 다르면 "X" 를 담는다.

 

📝  내가 작성한 코드

def solution(quiz):
    answer = []
    value = 0
    
    for q in quiz:
        left, right = q.split(" = ")
        value1, op, value2 = left.split(" ")
        
        if op == "+":
            value = int(value1) + int(value2)
        else:
            value = int(value1) - int(value2)
            
        if value == int(right):
            answer.append("O")
        else:
            answer.append("X")
            
    return answer

우수 혼공단 선정 너무 기뻐요!! ❤️

벌써 혼공단 활동도 절반을 넘어서 끝이 다가오네요... 시간이 너무 빨리 흐르는 것 같습니당 ㅎㅎ

이번 주도 열심히 공부 해 보겠습니다! 파이썬 공부 너무 재밌어요 👻😎


Chapter 06. 예외 처리

[구문 오류와 예외]

 

✏️ 구문 오류 (syntax error) : 프로그램이 실행되기 전에 발생하는 오류

  • 괄호나 따옴표 개수, 들여쓰기 등의 문제가 있을 때 발생
  • 해결하지 않으면 프로그램 자체가 실행되지 않으므로, 오류가 발생한 코드를 찾아 수정해야 한다.
# 정상적인 실행
print("Hello World")

# 구문 오류 발생 - 닫는 따옴표가 없음
# 닫는 따옴표 추가해서 해결
print("Hello World)

 

✏️ 예외 (exception) 또는 런타임 오류 (runtime error) : 프로그램 실행 중에 발생하는 오류이며, 구문 오류 해결법처럼 오류가 발생한 코드를 찾아 수정해야 한다.

 

✏️예외 처리 (exception handling) : 예외를 처리하는 모든 것

    ✔️ 구문 오류는 프로그램 실행 전에 발생하기 때문에 예외처리 방법으로 처리할 수 없다.

 

조건문으로 예외 처리하기

    ✔️ 정수를 입력받는 소스 코드에 문자열을 입력한다면 ? 예외 발생!

    ✔️ '정수를 입력하지 않았을 때' 를 조건으로 구분해서, 해당 상황일 때 프로그램이 죽지 않고 정상 종료되도록 한다.

# 조건문으로 예외 처리
input_num = input("정수 입력 > ")

# 사용자 입력이 숫자로만 구성되어 있을 때
if input_num.isdigit():
    number = int(input_num)
    print("입력받은 숫자: ", number)
else:
    print("정수가 입력되지 않았습니다.")

# 정수 입력한 경우
정수 입력 > 5
입력받은 숫자:  5

# 문자열 입력한 경우
정수 입력 > 문자열
정수가 입력되지 않았습니다.

 

try except 구문을 사용하여 예외 처리하기

  • 파이썬에서 제공하는 예외를 처리할 수 있는 구문
  • 어떤 상황에 예외가 발생하는 지 모두 파악하지 않아도 프로그램이 강제로 죽는 상황을 막을 수 있다.
try:
       예외가 발생할 가능성이 있는 코드
except:
       예외가 발생했을 때 실행할 코드
# try except 구문으로 예외 처리
try:
    # 예외가 발생할 가능성이 있는 구문
    input_num = int(input("정수 입력 > "))
    print("입력받은 숫자: ", input_num)
except:
    # 예외 발생 시 실행할 구문
    print("정수가 입력되지 않았습니다.")

# 정수 입력
정수 입력 > 6
입력받은 숫자:  6

# 정수가 아닌 문자열 입력
정수 입력 > 안녕하세요
정수가 입력되지 않았습니다.

 

 try except 구문과 pass 키워드를 조합해서 사용하기

  • try except 구문 사용 시 except 구문에 아무것도 넣지 않으면 구문 오류가 발생하므로, pass 키워드를 추가한다.
try:
       예외가 발생할 가능성이 있는 코드
except:
        pass

 

 try except else 구문

  • try except 구문에 else 구문을 넣으면 '예외가 발생 하지 않았을 때 실행할 코드' 를 지정할 수 있다.
  • 예외가 발생할 가능성이 있는 코드만 try 구문 내부에 넣고, 나머지는 else로 빼는 경우가 많다.
# try except else 구문으로 예외 처리
try:
    # 예외가 발생할 가능성이 있는 구문
    input_num = int(input("정수 입력 > "))
except:
    print("정수가 아닙니다.")
else:
    print("입력받은 숫자: ", input_num)
    
# 정수를 입력한 경우
정수 입력 > 10
입력받은 숫자:  10

# 정수를 입력하지 않은 경우
정수 입력 > hello
정수가 아닙니다.

 

finally 구문

  • 예외 처리 구문에서 가장 마지막에 사용할 수 있는 구문.
  • 예외 발생 여부와 상관 없이 무조건 실행할 때 사용하는 코드
try:
     예외가 발생할 가능성이 있는 코드
except:
      예외가 발생했을 때 실행할 코드
else:
      예외가 발생하지 않았을 때 실행할 코드
finally:
      무조건 실행할 코드
# try except 구문으로 예외 처리
try:
    # 예외가 발생할 가능성이 있는 구문
    input_num = int(input("정수 입력 > "))
    print("입력받은 숫자: ", input_num)
except:
    print("정수가 아닙니다.")
else:
    print("예외가 발생하지 않았습니다.")
finally:
    print("프로그램이 모두 끝났습니다.")
    
# 정수를 입력한 경우
정수 입력 > 10
입력받은 숫자:  10
예외가 발생하지 않았습니다.
프로그램이 모두 끝났습니다.

# 정수를 입력하지 않은 경우
정수 입력 > 테스트
정수가 아닙니다.
프로그램이 모두 끝났습니다.

 

※ try 구문은 단독으로 사용할 수 없고, 반드시 except 구문이나 finally 구문과 함께 사용해야 한다.

else 구문은 반드시 except 구문 뒤에 사용해야 한다.

 

 finally 키워드를 사용해서 코드를 깔끔하게 만들기

  • finally 키워드는 무조건 실행되기 때문에, 반복문이나 함수 내부에서 사용하면 좋다.
  • 예시) 파일 처리 코드
    • try 구문에서 return 키워드로 빠져 나가거나 예외 발생으로 try 구문 중간에 빠져 나가는 경우에 파일이 제대로 닫히지 않는 문제가 발생할 수 있음
    • finally 구문을 활용하여 try 구문을다 수행하지 않고 빠져나가더라도 무조건 파일이 닫히게 할 수 있다.

[예외 고급]

 

✏️ 예외 객체 (exception object) : 프로그램에서 예외가 발생하면 예외와 관련된 정보가 생긴다. 그리고 예외 정보는 예외 객체에 저장된다.

try:
      예외가 발생할 가능성이 있는 구문
except 예외의 종류 as 예외 객체를 활용할 변수 이름:
      예외가 발생했을 때 실행할 구문 

 

예외의 종류가 뭔지 모를 땐 Exception 을 사용한다.

# try except 구문으로 예외 처리
try:
    # 예외가 발생할 가능성이 있는 구문
    input_num = int(input("정수 입력 > "))
    print("입력받은 숫자: ", input_num)
except Exception as exception:
	# 예외 객체의 자료형 출력
    print("type(exception): ", type(exception))
    # 예외 객체 출력
    print(exception)
    
# 문자를 입력한 경우 예외 발생
정수 입력 > hi
type(exception):  <class 'ValueError'>
invalid literal for int() with base 10: 'hi'

 

프로그램 실행 중에 여러 개의 예외가 발생할 수 있다. 파이썬에서는 execpt 구문 뒤에 예외의 종류를 입력해서 예외를 구분할 수 있다.

try:
      예외가 발생할 가능성이 있는 구문
except 예외의 종류A:
        예외A가 발생했을 때 실행할 구문
except 예외의 종류B:
        예외B가 발생했을 때 실행할 구문
except 예외의 종류C:
        예외C가 발생했을 때 실행할 구문
list_a = [52, 273, 32, 72, 100]

# try except 구문으로 예외 처리
try:
    # 예외가 발생할 가능성이 있는 구문
    input_num = int(input("정수 입력 > "))
    print("list의 요소 :", list_a[input_num])
except ValueError:
    # ValueError가 발생하는 경우
    print("정수를 입력해 주세요")
except IndexError:
    # IndexError가 발생하는 경우
    print("인덱스의 값을 벗어났습니다.")
    
# 정수가 아닌 값 입력 : ValueError 발생
정수 입력 > Hello
정수를 입력해 주세요

# 리스트의 인덱스를 넘는 값 입력 : IndexError 발생
정수 입력 > 10
인덱스의 값을 벗어났습니다.

 

✏️ 예외를 구분할 때 각각의 except 구문 뒤에 예외 객체를 붙여 활용할 수 있다. as 키워드를 사용한다.

list_a = [52, 273, 32, 72, 100]

# try except 구문으로 예외 처리
try:
    # 예외가 발생할 가능성이 있는 구문
    input_num = int(input("정수 입력 > "))
    print("list의 요소 :", list_a[input_num])
except ValueError as excption:
    # ValueError가 발생하는 경우
    print("정수를 입력해 주세요")
    # 예외 객체 출력
    print("exception: ", excption)
except IndexError as excption:
    # IndexError가 발생하는 경우
    print("인덱스의 값을 벗어났습니다.")
    # 예외 객체 출력
    print("exception: ", excption)

# IndexError 발생시킨 경우
정수 입력 > 100
인덱스의 값을 벗어났습니다.
exception:  list index out of range

 

★ except 구문으로 예외를 구분하는 경우, 예외 조건에 일치하는 것이 없다면 프로그램이 종료된다.

    → except 구문의 마지막에는 Exception 을 추가하여 프로그램의 종료를 막는 것이 좋다.

★ '이 코드에서 어떤 예외가 발생할 것인지' 잘 예측하는 것이 중요하다.

list_a = [52, 273, 32, 72, 100]

# try except 구문으로 예외 처리
try:
    # 예외가 발생할 가능성이 있는 구문
    input_num = int(input("정수 입력 > "))
    print("list의 요소 :", list_a[input_num])
    예외발생()
except ValueError as excption:
    # ValueError가 발생하는 경우
    print("정수를 입력해 주세요")
    # 예외 객체 출력
    print("exception: ", excption)
except IndexError as excption:
    # IndexError가 발생하는 경우
    print("인덱스의 값을 벗어났습니다.")
    # 예외 객체 출력
    print("exception: ", excption)
except Exception as exception:
    # ValueError 와 IndexError가 아닌 예외가 발생한 경우
    print("이외의 예외가 발생하였습니다.")
    print(type(exception), exception)

# IndexError / ValueError가 아닌 예외 발생
정수 입력 > 1
list의 요소 : 273
이외의 예외가 발생하였습니다.
<class 'NameError'> name '예외발생' is not defined

 

✏️ raise 구문 : 예외를 강제로 발생시키고 싶을 때 사용하는 구문이다.

raise 예외 객체

Chapter 07. 모듈

[표준 모듈]

 

✏️ 모듈(module) : 파이썬은 모듈 기능을 활용해 코드를 분리하고 공유한다. 모듈은 여러 변수와 함수를 가지고 있는 집합체 이다.

     1️⃣ 표준 모듈 : 파이썬에 기본적으로 내장되어 있는 모듈 

     2️⃣ 외부 모듈 : 다른 사람들이 만들어서 공개한 모듈

 

✅ 모듈을 가져올 때는 import 구문을 사용하며, 코드의 가장 위에 작성한다.

import 모듈 이름

# 예시 : 수학과 관련된 모듈인 math모듈 가져오기
import math

 

✅ 모듈을 가져온 후 모듈에서 제공하는 변수나 함수를 사용할 수 있다.

import math

# 사인값을 구하는 내장 함수
math.sin(1)

# 0.8414709848078965

 

✅ from 구문

  • 모듈을 읽어들일 때 from 구문을 사용해서, 모듈에서 가져오려는 변수나 함수 앞에 모듈 이름을 생략할 수 있다.
from 모듈 이름 import 가져오고 싶은 변수 또는 함수
from math import sin

# math 를 붙이지 않아도 사용이 가능해 졌다.
sin(1)

# 0.8414709848078965

 

✅ as 구문

  • 모듈을 가져올 때 이름을 변경해서 사용하고 싶은 경우 as 구문을 사용한다.
from 모듈 as 사용하고 싶은 식별자
import math as m

# math 모듈을 m 이라는 이름으로 치환해서 사용한다.
m.sin(1)

# 0.8414709848078965

[기본 미션 : 구문 오류와 예외의 차이 설명하기 (p.379 1번 문제) ]

 

✅ 구문 오류는 프로그램이 실행되기 전에 발생하는 문법적인 오류이며, 해결하지 않으면 프로그램 자체가 실행 되지 않는다. 예외는 프로그램이 실행 중에 발생하는 오류로, 예외 처리 (ex. try except 구문) 를 통해 해결할 수 있다.

 

[선택 미션 : p. 381 3번 문제 풀고 인증하기]

1️⃣ 정수형과 문자를 연산할 수 없어서 발생하는 예외

2️⃣ 문자열 "안녕하세요" 를 정수로 변환할 수 없어서 발생하는 예외

3️⃣ 괄호가 제대로 닫히지 않아서 발생하는 구문 오류

4️⃣ 리스트의 인덱스 범위를 벗어난 예외

곧 공채시즌이라 이직을 위한 이력서 업데이트도 하면서 공부도 하려니 이번주는 정신이 없네요...ㅎㅎ

이번 주는 공부를 많이 못한 것 같아 아쉽습니다 🥲

매주 숙제 제출할 때 마다 족장님이 달아주시는 폭풍 칭찬이 쑥쓰럽기도 하고, 또 이번주도 꼭 해야지 라고 다짐하는 원동력이 되기도 합니당! ㅎㅎ 😎 (칭찬 조아..)

올해는 공부와 이직 두 마리 토끼를 다 잡을 수 있도록 열심히 해보겠습니다! 🫡


Chapter 05. 함수

[함수 만들기]

 

✏️ 함수 : '코드의 집합' 을 의미한다. 함수를 사용하는 것을 함수를 호출한다고 표현한다.

def 함수 이름():
      문장
# print 함수를 세번 수행하는 함수 print_test() 생성 후 호출
def print_test():
    print("안녕하세요")
    print("안녕하세요")
    print("안녕하세요")

print_test()

# 출력
안녕하세요
안녕하세요
안녕하세요

[선택 미션 : 매개변수, 기본 매개변수, 가변 매개변수에 대해 간략하게 정리하기]

 

✏️ 매개변수란?

함수를 호출할 때 괄호 사이에 들어가는 자료들을 매개변수라고 한다. 매개변수는 함수 생성 시 입력한다.

★ 함수 생성 시 매개변수를 만들면, 함수를 호출할 때 매개변수 자리에 입력한 값을 함수 내에서 사용할 수 있다.

★ 함수에 매개변수를 만들었는데, 호출 시 매개변수를 넣지 않거나 갯수를 다르게 넣은 경우 오류가 발생한다!

def 함수 이름(매개변수, 매개변수, ...):
      문장
# 매개변수 value, n 추가한 함수 생성
def print_test_number(value, n):
    for i in range(n):
        print(value)

print_test_number("테스트입니다", 3)

# 출력
테스트입니다
테스트입니다
테스트입니다

 

✏️ 가변 매개변수란?

매개변수의 개수가 변할 수 있다는 의미이며, 매개변수를 원하는 만큼 받을 수 있는 함수를 가변 매개변수 함수라고 한다.

가변 매개변수는 하나만 사용할 수 있으며, 가변 매개변수 뒤에는 일반 매개변수가 올 수 없다.

    ✔️ 가변 매개변수는 맨 뒤에 배치하고, 함수 내에서는 리스트처럼 사용한다.

def 함수 이름(매개변수, 매개변수, ... , *가변 매개변수):
      코드
def print_test_number(n, *value):
    for i in range(n):
        print(value)

print_test_number(3, "파이썬", "가변매개변수","테스트입니다")

# 출력
('파이썬', '가변매개변수', '테스트입니다')
('파이썬', '가변매개변수', '테스트입니다')
('파이썬', '가변매개변수', '테스트입니다')

 

✏️ 기본 매개변수란?

매개변수를 입력하지 않았을 경우에 대비해 매개변수에 들어갈 기본값을 지정할 수 있는데, 이를 기본 매개변수라고 한다. 

기본 매개변수 뒤에는 일반 매개변수가 올 수 없다.

def 함수 이름(매개변수매개변수=값):
      문장
def print_test_number(value, n=2):
    for i in range(n):
        print(value)

# 함수 호출 시 매개변수 n을 입력하지 않아서 기본값 2가 사용됨
print_test_number("테스트입니다")

#출력
테스트입니다
테스트입니다

✏️ 키워드 매개변수

기본적으로 가변 매개변수와 기본 매개변수 뒤에는 일반 매개변수가 올 수 없다. 파이썬에서는 매개변수 순서를 원하는 대로 입력하기 위해서 키워드 매개변수를 제공한다.

키워드 매개변수는  함수 호출 시 매개변수 이름을 지정해서 입력한다.

def 함수이름 (매개변수 a, 매개변수 b = 10):
       코드

# 함수 호출
함수이름(10, 매개변수 b = 20)  # 함수 호출 시 매개변수 이름을 지정해서 입력
def function_test(a, b=10, c=20):
        print("{}, {}, {}".format(a,b,c))

# 기본 매개변수만 사용
function_test(10,100,200)
>> 10, 100, 200

# 키워드 매개변수 사용
function_test(a=20, b = 0 , c = 10)
>> 20, 0, 10

# 키워드 매개변수 사용, 매개변수 순서 변경
function_test(c=1, a=2, b=3)
>> 2, 3, 1

# 키워드 매개변수로 일부 매개변수만 지정
function_test(9,c=11)
>> 9, 10, 11

 

★ 키워드 매개변수를 사용하여 필요한 매개변수에만 값을 전달할 수 있다.

 

[리턴]

 

함수를 실행하고 난 후 받아오는 결과를 리턴값(return value) 이라고 한다.

 

✏️ return 키워드

     ✅ 함수 내부에 사용하며, 함수를 실행했던 위치로 돌아가라는 뜻으로 함수가 끝나는 시점 의미한다.

     ✅ return 키워드만 사용 시 자료 없이 리턴하며, return 뒤에 자료를 입력하면 자료를 가지고 리턴한다.

# 자료 없이 리턴하는 예시
def function_1():
    print("첫번째 print")
    return    			# 3번 라인 까지만 수행하고 함수가 종료된다.
    print("두번째 print")

function_1()

# 출력
첫번째 print

 

# 자료를 가지고 리턴하는 예시
def function_test2():
    return 100		# 100 을 반환한다.

value = function_test2()
print(value)

# 출력
100

 

✏️ 함수의 활용

      ✅ 일반적으로 함수 내에서 값을 만들어 리턴하는 형태로 사용

def 함수(매개변수):
      변수=초기값
      # 여러가지 처리
      # 여러가지 처리
      return 변수

     

[기본 미션 : p.287 [직접 해보는 손코딩: 범위 내부의 정수를 모두 더하는 함수] 실행 후 코드가 입력된 화면 및 실행 결과 화면 캡쳐하기 ]


[함수 고급]

 

✏️ 튜플(tuple) : 리스트와 비슷한 자료형으로, 한번 결정된 요소는 바꿀 수 없다.

변수 = (데이터, 데이터, 데이터, ...)

# 주의할 점 : 요소를 하나만 가지는 튜플은 아래와 같이 선언한다!
변수 = (데이터, )
# 튜플 선언
tuple_test = (1,2,3)

print(tuple_test[0])	# 1
print(tuple_test[1])	# 2
print(tuple_test[2])	# 3

 

 ✅ 리스트와 튜플은 다음과 같은 형태로 변수를 선언하고 할당할 수 있다. 또한 튜플은 괄호를 생략할 수도 있다.

# 리스트의 요소 a,b 에 각각 1, 2 할당
[a, b] = [1, 2]

# 튜플의 요소 c,d에 각각 10,20 할당
(c,d) = (10,20)
#리스트 할당 구문
[a,b] = [1,2]
print(a)		# 1
print(b)		# 2

# 튜플 할당 구문
(c,d) = (10,20)
print(c)		# 10
print(d)		# 20

# 괄호가 없는 튜플
tuple_test = 1,2,3,4,5

print(tuple_test)		# (1, 2, 3, 4, 5)
print(tuple_test[2])		# 3

# 괄호가 없는 튜플
a,b,c = 10, 20, 30
print(a)			# 10
print(b)			# 20
print(c)			# 30

 

 ✅ 함수의 리턴에 튜플을 사용하면 여러개의 값을 리턴하고 할당할 수 있다.

# 여러개의 값 리턴
def test():
    return (10,20)

# 리턴한 값 각각 a,b에 할당
a,b = test()

print(a)	# 10
print(b)	# 20

 

✏️ 람다 : 매개변수로 함수를 전달하기 위해 간단하게 1회용 함수를 선언하는 방법

     ✅ 매개변수로 함수를 전달하기 위해 함수 구문을 작성하는 것이 번거롭기 때문에 파이썬에서 제공하는 방법

     ✅ 람다를 사용하면 코드를 깔끔하게 작성할 수 있고, 매개변수로 넣어진 함수를 파악하기도 쉽다.

lambda 매개변수 : 리턴값

 

# 람다 함수 선언
lambda_test = lambda x : x < 3

list_a = [1,2,3,4,5]

# 람다는 매개변수로 바로 넣을 수 있다.
output_a = map(lambda x : x * x, list_a)
print(list(output_a))		# [1, 4, 9, 16, 25]

+ Recent posts