2013190714
김명준
소프트웨어 융합전공
파이썬
함수
 함수의 목적은 코드의 재사용
 반복하면서 코드를 짜지 않고 함수를 통해서
코드를 부른다.
 함수는 함수를 정의를 하고 호출을 한다.
함수 - 리턴값
 함수는 방금 처럼 그냥 print()하듯이 코드의 기능
만 할 수도 있으나 return을 통해서 함수가 변수를
나타낼 수도 있다.
함수 - 매개변수
 매번 함수가 필요한 값이 다를 때 매개변수를 사용
하여 값을 줄 수 있다.
함수 - 매개변수
 파이썬에서는 함수의 매개변수에 다른 함수를 삽
입 할 수 있다.
함수 - 재귀함수
 함수가 자기 자신을 부른다.
 계속 자기 자신을 부르기 때문에 끝나는 구간이 존
재해야함
함수 - 내부함수
 함수 내에 또 함수를 선언
 루프나 중복을 피하기 위함
함수 - 람다함수
 이름이 없는 함수
 보통 취향에 따라 사용
 선언 방식은
 Lambda 변수 : 리턴함수
 작은 여럿의 함수를 사용
해야할 경우 용이
제너레이터
 연속된 파이선의 변수의 시퀀스를 생성
 이미 우리는 range라는 시퀀스를 사용
제너레이터 - 구현
* - 위치 인자 모으기
 매개변수로 들어온 남은 모든 인자를 tuple 형태로
모은다.
tuple
 Tuple은 ()의 모양
 ,로 구분하며 원소가 하나일 경우 (1,)의 형태
 tuple(변수) – tuple처럼 생긴 변수를 tuple로 변환
** - 인자 모으기
 매개변수로 들어온 남은 모든 인자를 dictionary 형
태로 모은다.
dictionary
 순서가 아닌 Key의 값으로 구분
 다른 언어에서의 hash와 유사
 Key에 value가 매치되어 있음
 {key:value}의 모양
 dict(변수) – dictionary처럼 생긴 변수를 변환
decorator
 함수를 리턴해주는 함수, 함수의 변환이 용이
응용 - 피보나치 수열
 고등 수학에서의 피보나치
응용 – 피보나치 수열
 https://www.acmicpc.net/problem/10870
 함수로 짜보기
응용 – 피보나치 수열
 https://www.acmicpc.net/problem/2747
 그냥 풀면 시간초과가 나옴
 For 문을 활용
응용 – 피보나치 수열
 https://www.acmicpc.net/problem/1003
 피보나치 문제의 응용
응용 – 매우 큰 피보나치
 https://www.acmicpc.net/problem/2749
 그냥 풀면 시간초과가 나온다.
 피보나치는 특정 주기를 가지고 이를 “피사노 주기”
라고 부른다.
객체(Object)
 객체란 변수와 함수를 포함하는 개념
 객체 하나하나가 실생활에서의 물체와 연관되는
개념
 예시 – 사람
 사람은 이름,성별,나이등의 변수를 가진다.
 사람은 자다,걷다,공부하다,놀다 등의 행동(함수)
을 가질 수 있다.
 명준.name = 명준
 명준.sleeping()
클래스(class)
 객체를 표현하기 위한 개념
 빈 클래스의 모양 – 사람 한명을 선언
클래스(class) - 초기화
 객체 초기화 메서드 __init__, self
 이름을 가지는 클래스 선언
클래스(class) - 상속
 기존 클래스에서 기능만 추가 해야할때
 코드를 수정하긴 힘들어진다.
 이럴 경우 상속을 사용
 기존의 함수에 필요한 기능만 추가/변경하여 새로
운 클래스를 정의
 이런 경우 기존 클래스는 부모(super,parent,base)
클래스라고 부른다.
 새로운 클래스의 경우 자식(child,sub,derived) 클
래스 라고 부른다.
클래스(class) - 상속
 상위 클래스인 Car와 그를 상속받는 Yugo
 상속을 받을 자식 클래스는 자식(상위)의 형태
 자식은 부모 클래스가 가진 모든 기능을 사용할 수
있다.
클래스(class) - 상속
 부모 클래스 Car에 ex라는 함수 부여
 이를 상속받는 Yugo또한 ex라는 함수를 사용가능
클래스(class) – 매서드 오버라이드
 만약 부모와 자식과 같은 이름의 함수가 있다면??
 답은 자식의 함수를 사용 – 메서드 오버라이드
클래스(class) – 메서드 추가하기
 자식은 부모가 없는 메서드를 추가 가능
 이 메서드를 부모는 호출 불가
클래스(class) – super
 자식에서 자신의 메서드가 아닌 부모의 메서드를
사용하고 싶을 경우 super를 통해서 사용
 Init같은 초기화 함수는 자식에서 생성할 경우
더 이상 부모의 Init을 자동으로 사용하지 않아
super를 써야함
메서드 타입
 여지껏 사용한 함수들은 인스턴스 메서드로 일반
적인 메서드, self라는 변수를 받는다.
 이와 다른 함수인 클래스 메서드 존재, 이는 객체
하나하나가 아닌 클래스 전제에 영향을 줌
다형성
 다형성이란 배운것처럼 클래스에서의 같은 메서드
가 여러가지 형태를 지닐 수 있다는 것을 말함
다형성
 Says라는 함수를 가진 Quote클래스를 상속받는
그룹과 전혀 엉뚱한 BabblingBrook이라는 클래스,
 Who_says는 obj라는 것을 받아와 그것의 says와
who를 사용한다.
다형성
 이런 식으로 says라는 함수가 모습이 상속에 따라
모습이 달라질 수 있고 이를 한꺼번에 다룰 수 있
다.
특수 메서드
 원래 형태
 이런 모양인데 equals가 아니라 == 이었으면 좋겠
다.
특수 메서드
 함수를 __eq__ 라고 바꿈
 __eq__ == __floordiv__ //
 __ne__ != __truediv__ /
 __lt__ < __mod__ %
 __gt__ > __pow__ **
 __le__ <= __str__ str()
 __ge__ >= __repr__ repr()
 __add__ + __len__ len()
 __sub__ -
 __mul__ *
문제 풀어보기
 https://www.acmicpc.net/problem/1002
 고등학교 원과 원이 만나는 개수를 구하는 문제
문제 풀어보기
 하노이의 탑
 https://www.acmicpc.net/problem/11729
문제 풀어보기 – 하노이 탑
 한번에 하나를 이동가능
 3개의 위치가 존재
 첫번째 위치에 순차적으로 존재하는 탑을 모양 그
대로 세번째 위치로 움직이는 작업

파이썬 둘째날

  • 1.
  • 2.
    함수  함수의 목적은코드의 재사용  반복하면서 코드를 짜지 않고 함수를 통해서 코드를 부른다.  함수는 함수를 정의를 하고 호출을 한다.
  • 3.
    함수 - 리턴값 함수는 방금 처럼 그냥 print()하듯이 코드의 기능 만 할 수도 있으나 return을 통해서 함수가 변수를 나타낼 수도 있다.
  • 4.
    함수 - 매개변수 매번 함수가 필요한 값이 다를 때 매개변수를 사용 하여 값을 줄 수 있다.
  • 5.
    함수 - 매개변수 파이썬에서는 함수의 매개변수에 다른 함수를 삽 입 할 수 있다.
  • 6.
    함수 - 재귀함수 함수가 자기 자신을 부른다.  계속 자기 자신을 부르기 때문에 끝나는 구간이 존 재해야함
  • 7.
    함수 - 내부함수 함수 내에 또 함수를 선언  루프나 중복을 피하기 위함
  • 8.
    함수 - 람다함수 이름이 없는 함수  보통 취향에 따라 사용  선언 방식은  Lambda 변수 : 리턴함수  작은 여럿의 함수를 사용 해야할 경우 용이
  • 9.
    제너레이터  연속된 파이선의변수의 시퀀스를 생성  이미 우리는 range라는 시퀀스를 사용
  • 10.
  • 11.
    * - 위치인자 모으기  매개변수로 들어온 남은 모든 인자를 tuple 형태로 모은다.
  • 12.
    tuple  Tuple은 ()의모양  ,로 구분하며 원소가 하나일 경우 (1,)의 형태  tuple(변수) – tuple처럼 생긴 변수를 tuple로 변환
  • 13.
    ** - 인자모으기  매개변수로 들어온 남은 모든 인자를 dictionary 형 태로 모은다.
  • 14.
    dictionary  순서가 아닌Key의 값으로 구분  다른 언어에서의 hash와 유사  Key에 value가 매치되어 있음  {key:value}의 모양  dict(변수) – dictionary처럼 생긴 변수를 변환
  • 15.
    decorator  함수를 리턴해주는함수, 함수의 변환이 용이
  • 16.
    응용 - 피보나치수열  고등 수학에서의 피보나치
  • 17.
    응용 – 피보나치수열  https://www.acmicpc.net/problem/10870  함수로 짜보기
  • 18.
    응용 – 피보나치수열  https://www.acmicpc.net/problem/2747  그냥 풀면 시간초과가 나옴  For 문을 활용
  • 19.
    응용 – 피보나치수열  https://www.acmicpc.net/problem/1003  피보나치 문제의 응용
  • 20.
    응용 – 매우큰 피보나치  https://www.acmicpc.net/problem/2749  그냥 풀면 시간초과가 나온다.  피보나치는 특정 주기를 가지고 이를 “피사노 주기” 라고 부른다.
  • 21.
    객체(Object)  객체란 변수와함수를 포함하는 개념  객체 하나하나가 실생활에서의 물체와 연관되는 개념  예시 – 사람  사람은 이름,성별,나이등의 변수를 가진다.  사람은 자다,걷다,공부하다,놀다 등의 행동(함수) 을 가질 수 있다.  명준.name = 명준  명준.sleeping()
  • 22.
    클래스(class)  객체를 표현하기위한 개념  빈 클래스의 모양 – 사람 한명을 선언
  • 23.
    클래스(class) - 초기화 객체 초기화 메서드 __init__, self  이름을 가지는 클래스 선언
  • 24.
    클래스(class) - 상속 기존 클래스에서 기능만 추가 해야할때  코드를 수정하긴 힘들어진다.  이럴 경우 상속을 사용  기존의 함수에 필요한 기능만 추가/변경하여 새로 운 클래스를 정의  이런 경우 기존 클래스는 부모(super,parent,base) 클래스라고 부른다.  새로운 클래스의 경우 자식(child,sub,derived) 클 래스 라고 부른다.
  • 25.
    클래스(class) - 상속 상위 클래스인 Car와 그를 상속받는 Yugo  상속을 받을 자식 클래스는 자식(상위)의 형태  자식은 부모 클래스가 가진 모든 기능을 사용할 수 있다.
  • 26.
    클래스(class) - 상속 부모 클래스 Car에 ex라는 함수 부여  이를 상속받는 Yugo또한 ex라는 함수를 사용가능
  • 27.
    클래스(class) – 매서드오버라이드  만약 부모와 자식과 같은 이름의 함수가 있다면??  답은 자식의 함수를 사용 – 메서드 오버라이드
  • 28.
    클래스(class) – 메서드추가하기  자식은 부모가 없는 메서드를 추가 가능  이 메서드를 부모는 호출 불가
  • 29.
    클래스(class) – super 자식에서 자신의 메서드가 아닌 부모의 메서드를 사용하고 싶을 경우 super를 통해서 사용  Init같은 초기화 함수는 자식에서 생성할 경우 더 이상 부모의 Init을 자동으로 사용하지 않아 super를 써야함
  • 30.
    메서드 타입  여지껏사용한 함수들은 인스턴스 메서드로 일반 적인 메서드, self라는 변수를 받는다.  이와 다른 함수인 클래스 메서드 존재, 이는 객체 하나하나가 아닌 클래스 전제에 영향을 줌
  • 31.
    다형성  다형성이란 배운것처럼클래스에서의 같은 메서드 가 여러가지 형태를 지닐 수 있다는 것을 말함
  • 32.
    다형성  Says라는 함수를가진 Quote클래스를 상속받는 그룹과 전혀 엉뚱한 BabblingBrook이라는 클래스,  Who_says는 obj라는 것을 받아와 그것의 says와 who를 사용한다.
  • 33.
    다형성  이런 식으로says라는 함수가 모습이 상속에 따라 모습이 달라질 수 있고 이를 한꺼번에 다룰 수 있 다.
  • 34.
    특수 메서드  원래형태  이런 모양인데 equals가 아니라 == 이었으면 좋겠 다.
  • 35.
    특수 메서드  함수를__eq__ 라고 바꿈
  • 36.
     __eq__ ==__floordiv__ //  __ne__ != __truediv__ /  __lt__ < __mod__ %  __gt__ > __pow__ **  __le__ <= __str__ str()  __ge__ >= __repr__ repr()  __add__ + __len__ len()  __sub__ -  __mul__ *
  • 37.
    문제 풀어보기  https://www.acmicpc.net/problem/1002 고등학교 원과 원이 만나는 개수를 구하는 문제
  • 38.
    문제 풀어보기  하노이의탑  https://www.acmicpc.net/problem/11729
  • 39.
    문제 풀어보기 –하노이 탑  한번에 하나를 이동가능  3개의 위치가 존재  첫번째 위치에 순차적으로 존재하는 탑을 모양 그 대로 세번째 위치로 움직이는 작업