django 00. 강의소개 - 강의 듣는 법, 질문하는 법, 왜 python을 사용하는가?

|

django 강의소개

파이썬 웹 프로그래밍 - Django로 웹 서비스 개발하기

강의를 듣는 법

  • 실습은 모두 직접 입력하고 실행해 본다.
  • 이해가 안 가도 오래 고민하지 않는다. (30분)
    • 5 Why 정도로 충분
    • 나중에 알게 된다.
  • 반복적인 연습
    • 점진적인 연습을 통해 이해도를 높여 나감
  • 종료 후 무엇인가를 만들어 보자
    • 코딩은 만드는 도구일 뿐, 만들지 않고 학습하면 의미가 없다

질문하는 법

  • 질문 전에 3가지 다른 방법을 시도해 보자.
  • 먼저 상황을 설명한다.
  • 실행 환경을 기술한다.
    • OS, 파이썬 버전, 프레임워크 버전 등 자세하게
    • 문제 상황을 답변자가 재현 가능하도록
  • https://gist.github.com 을 이용 소스코드 첨부
  • 맞춤법 지키기, 그리고 예의 바르게

왜 python 을 사용하나?

  • https://www.python.org/
  • 배우기 쉽고, 재밌고, 강력하다.
  • Life is short, use python
  • 무료 강의 + 실습 (해당 서비스에서 문법을 학습하니 도움이 많이 되었다.)
    • http://tryhelloworld.co.kr/courses/파이썬-입문/

왜 Django를 사용하나?

  • https://www.djangoproject.com/
  • 쉽고
  • 강력하고
  • 안전하고
  • 확장가능!
  • 마감을 지켜주는 웹 프레임워크
    • 여러분의 삶은 소중하니까요.

파이썬 파트18. 날짜와 시간 - datetime

|

파이썬 파트18. 날짜와 시간 - datetime

try hello world 파이썬 입문 강의

datetime 모듈

  • 날짜와 시간을 사용하게 해주는 라이브러리
  • datetime 모듈을 사용하기 위해서는 코드 내에 import datetime이 필요하다.
  • datetime 클래스의 .now() 메소드는 현재 시간을 알려준다.
import datetime
datetime.datetime.now()
start_time = datetime.datetime.now()
# datetime.datetime(2017, 2, 27, 12, 11, 12, 766738)
  • datetime 클래스의 .replace() 메소드는 날짜 시간을 교체해준다.
>>> start_time = start_time.replace(year = 2018, month = 12, day = 25)
>>> start_time
datetime.datetime(2018, 12, 25, 12, 11, 46, 427559)
  • 지금부터 ~ 2017년 크리스마스 까지 남은 시간 구하기
start_time = datetime.datetime(2017, 12, 25)
how_long = start_time - datetime.datetime.now()
# datetime.timedelta(300, 42173, 524163)

type(how_long) # <class 'datetime.timedelta'>

# timedelta 클래스는 days 와 seconds로 시간을 계산할 수 있다.
print('크리스마스 까지는 {}일 {}시간 남았습니다.'.format(how_long.days, how_long.seconds // 3600))
# 크리스마스 까지는 300일 11시간 남았습니다.

timedelta 클래스

  • 시간의 연산을 가능하게 해주는 클래스
  • datetime 클래스와 timedelta 클래스를 더하고 뺴면 시간과 날짜를 자유자재로 사용할 수 있다.
  • 지금으로 부터 100일 후, 100일 전 구하기
import datetime

hundred = datetime.timedelta(days = 100)
datetime.datetime.now() + hundred
# datetime.datetime(2017, 6, 7, 12, 33, 11, 902557)

how_long= datetime.datetime.now() - hundred
# datetime.datetime(2016, 11, 19, 12, 34, 15, 39370)

파이썬 파트17. comprehension - list, dictionary

|

파이썬 파트17. comprehension - list, dictionary

try hello world 파이썬 입문 강의

List Comprehension (리스트 내포)

  • 원하는 구성요소를 가지는 리스트를 쉽게 만들 수 있는 기능
    (한번 익숙해지면, List Comprehension이 없는 다른 프로그래밍 언어는 쓰기 싫어진다고 함)
  • 파이썬의 유용한 도구
    • 예1 [ i*i for i in range(1,11) ] # [ 계산식 for문 ]
    • 예2 [ i*i for i in range(1,11) if i % 2 == 0 ] # [ 계산식 for문 조건문 ]
    • 예3 [ ( x, y ) for x in range(15) for y in range(15) ] # [ 계산식 for문 for문 ]
# 길이가 1~10 인 정사각형 중에 길이가 짝수인 정사각형의 넓이 구하기
areas = []
for i in range(1,11):
    if i % 2 == 0:
        areas.extend([i*i])

print('areas :', areas)  # [4, 16, 36, 64, 100]

# list comprehension 방법
areas2 = [i * i for i in range(1,11) if i % 2 ==0]
print('areas2 :', areas2)  # [4, 16, 36, 64, 100]

# for 문을 돌면서 i를 하나씩 가져오고,
# if 조건에 맞는 i만 보낸다.
# 조건에 맞는 i 를 원하는대로 계산해서 리스트에 넣는다.


# 길이가 3*3 인 바둑판의 좌표 만들기
[(x, y) for x in range(3) for y in range(3)]
# [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

Dictionary Comprehension (딕셔너리 내포))

  • 원하는 구성요소를 가지는 딕셔너리를 쉽게 만들 수 있는 기능
# 번호를 key로 갖고 이름을 value로 가지는 dictionary 만들기
students = ['몽키', '선샤인', '시와', '톰']
for number, name in enumerate(students):
    print('{}번의 이름은 {}입니다'.format(number+1, name))

# Dictionary Comprehension
students_dic = {
    '{}번'.format(number+1) : name for number, name in enumerate(students)
}

print(students_dic)

zip

  • zip(iterable*)은 동일한 개수로 이루어진 자료형을 묶어 주는 역할을 하는 함수이다.
  • 2개 이상의 리스트나 스트링을 받아서 인덱스에 맞게 for in문에서 하나씩 던져줄 수있게 만들어준다.
students = ['몽키', '선샤인', '시와', '톰']
scores = [85, 92, 78, 100]

for x, y in zip(students, scores):
    print(x, y)
    # 몽키 85
    # 선샤인 92
    # 시와 78
    # 톰 100    

zip을 활용한 dictionary comprehension 만들기

students = ['몽키', '선샤인', '시와', '톰']
scores = [85, 92, 78, 100]

score_dic = {
    students : score for students, score in zip(students, scores)
}

print(score_dic)
# {'몽키': 85, '선샤인': 92, '시와': 78, '톰': 100}

파이썬 파트16. 상속과 다형성

|

파이썬 파트16. 상속과 다형성

try hello world 파이썬 입문 강의

상속 (inheritance)

클래스의 상속(inheritance)
  • 부모클래스 : 상속하는 클래스
  • 자식클래스 : 상속받는 클래스
  • 자식 클래스가 부모 클래스의 내용을 가져다 쓸 수 있는 것
class Animal():
    def walk(self):
        print('걷는다')

    def eat(self):
        print('먹는다')


class Human(Animal): # 상속 : 클래스 괄호 안에 다른 (부모)클래스를 넣는 것
    def wave(self):
        print('손을 흔든다')

class Dog(Animal): # Animal의 내용을 상속받는다
    def wag(self):
        print('꼬리를 흔든다')

person = Human()
person.walk()
person.eat()
person.wave()

dog = Dog()
dog.walk()
dog.eat()
dog.wag()

단순 오버라이드 (Override)

  • 부모클래스와 같은 이름을 가진 메소드를 덮어쓰기 한다.
class Animal():
    def walk(self):
        print('걷는다')

    def eat(self):
        print('먹는다')

    def greet(self):
        print('인사한다')

class Cow(Animal):
    '''소'''

class Human(Animal): # 상속 : 클래스 괄호 안에 다른 (부모)클래스를 넣는 것
    def wave(self):
        print('손을 흔든다')

    def greet(self): # 부모 클래스의 greet 메소드를 덮어쓰기 한다.
        self.wave()

class Dog(Animal): # Animal의 내용을 상속받는다
    def wag(self):
        print('꼬리를 흔든다')

    def greet(self): # 부모 클래스의 greet 메소드를 덮어쓰기 한다.
        self.wag()

person = Human()
person.greet()

dog = Dog()
dog.greet()

cow = Cow()
cow.greet()

super()

  • 자식클래스에서 부모클래스의 내용을 사용하고 싶은 경우
  • super().부모클래스내용
class Animal( ):
    def __init__( self, name ):
        self.name = name

class Human( Animal ):
    def __init__( self, name, hand ):
        super().__init__( name ) # 부모클래스의 __init__ 메소드 호출
        self.hand = hand

person = Human( "사람", "오른손" )

내 예외 만들기

  • 사용자가 직접 예외처리를 하면 코드의 직관성을 높일 수 있다.
  • 파일을 하나 만들어 예외를 정의
  • Exception 클래스를 상속받아 만든다
Exception 클래스 상속

코드 예시 1 (my_exception_list.py)

class UnexpectedRSPValue(Exception):
    ''' 가위 바위 보 가운데 하나가 아닌 경우에 발생하는 에러 '''

코드 예시 2 (my_exception.py)

# 다른파일의 클래스를 불러온다
from my_exception_list import UnexpectedRSPValue

value = input('가위, 바위, 보 중 하나를 선택하세요 >')
try:
    if value not in ['가위', '바위', '보']:
        raise UnexpectedRSPValue
except UnexpectedRSPValue:
    print('입력 값이 올바르지 않습니다.')

파이썬 파트15. 클래스와 객체지향 프로그래밍 - 클래스, 인스턴스, 메소드

|

파이썬 파트15. 클래스와 객체지향 프로그래밍

try hello world 파이썬 입문 강의

자료형 (data type)

자료형 확인 및 검사

# type() 함수를 통한 자료형 확인
>>> s = 'hello'
>>> type(s)
<class 'str'> #string 문자열

>>> f = 3.14
>>> type(f)
<class 'float'> #floating point 부동소수점

# isinstace() 함수를 통한 자료형 검사
>>> isinstance(42, int)
True

자료형 종류

<class 'list'> #리스트
<class 'dict'> #딕셔너리
<class 'tuple'> #튜플
<class 'int'> #정수
<class 'float'> #소수

인스턴스(instance)의 이해

클래스

  • 함수나 변수들을 모아 놓은 집합체

인스턴스

  • 클래스에 의해 생성된 객체
  • 인스턴스 각자 자신의 값을 가지고 있다.
list1 = [1, 2, 3]
list2 = [1, 2, 3]

if list1 is list1: #둘이 같은 인스턴스인지 확인
    print("당연히 list1과 list1은 같은 인스턴스입니다.")

if list1 == list2: #둘이 같은 값을 가지는지 확인
    print("list1과 list2의 값은 같습니다.")
    if list1 is list2:
        print("그리고 list1과 list2는 같은 인스턴스입니다.")
    else:
        print("하지만 list1과 list2는 다른 인스턴스입니다.")

    # 당연히 list1과 list1은 같은 인스턴스입니다.
    # list1과 list2의 값은 같습니다.
    # 하지만 list1과 list2는 다른 인스턴스입니다.
class와 instance의 개념

클래스(class) 만들기

클래스와 인스턴스를 이용하면 데이터와 코드를 사람이 이해하기 쉽게 포장할 수 있다. 클래스를 사용하는 이유는 현실의 개념을 더 쉽게 코드에서 표현하기 위해서이다.

클래스 선언

#인간 클래스 작성
class Human():
    '''사람'''

인스턴스 생성

 # Human 클래스의 인스턴스로 person1, person2 생성
person1 = Human()
person2 = Human() # 인간 클래스의 인스턴스가 person2에 생긴다.

# 리스트 클래스의 인스턴스를 만드는 예
a = list()
isinstance(a, list) # True
# 리스트의 다양한 기능을 사용할 수 있었던 건 리스트에 이미 기능들이 구현되어 있기 때문이다.

클래스의 특성 만들기 예시

person1.language = '한국어'
person2.language = 'English'

person1.name = '서울사람'
person2.name = '인도사람'

def speak(person):
    print('{}이 {}로 말을 합니다'.format(person.name, person.language))

Human.speak = speak

person1.speak() # 서울사람이 한국어로 말을 합니다
person2.speak() # 인도사람이 English로 말을 합니다

모델링 (modeling)

클래스로 현실의 개념을 표현하는 것

class Human():
    '''인간 클래스'''

def create_human(name, weight):
    person = Human()
    person.name = name
    person.weight = weight
    return person

Human.create = create_human

person = Human.create('몽키', 50)

def eat(person):
    person.weight += 0.1
    print('{}가 먹어서 {}kg이 되었습니다.'.format(person.name, person.weight))

def walk(person):
    person.weight -= 0.1
    print('{}가 걸어서 {}kg이 되었습니다.'.format(person.name, person.weight))

Human.eat = eat
Human.walk = walk

person.walk()
person.eat()
person.walk()

메소드(method)

  • 메소드는 함수와 비슷하다.
  • 클래스에 묶여서 클래스의 인스턴스와 관계되는 일을 하는 함수

클래스 내부에 함수를 포함시킨 예

class Human( ):
    '''인간'''
    def create( name, weight ): # 다음 강의에서 자세히 설명
        person = Human()
        person.name = name
        person.weight = weight
        return person

    def eat( self ): # 메소드의 첫번째 매개변수 이름은 self를 많이 사용한다.
        self.weight += 0.1
        print("{}가 먹어서 {}kg이 되었습니다".format(self.name, self.weight))

    def walk( self ):
        self.weight -= 0.1
        print("{}가 걸어서 {}kg이 되었습니다".format(self.name, self.weight))

person = Human.create("철수", 60.5)
person.eat()

self

  • 메소드의 첫번째 인자
  • 인스턴스의 매개변수를 전달 할 때는 self 매개변수는 생략하고 전달

특수한 메소드

초기화 함수

__init__ : 인스턴스를 만들 때 자동으로 실행되는 함수

문자열화 함수

__str__ : 인스턴스 자체를 출력 할 때의 형식을 지정해주는 함수

class Human():
    '''인간'''

    #__언더바2개__ 는 파이썬에서 특별한 함수라는 의미
    def __init__(self, name, weight):
        '''초기화 함수''' # 인스턴스 생성시 자동으로 실행되는 함수
        self.name = name
        self.weight = weight

    def __str__(self):
        '''문자열화 함수''' # 인스턴스 자체를 출력할 때의 형식을 지정하는 함수
        return "{}(몸무게 {}kg)".format(self.name, self.weight)

person = Human('몽키', '47') # 초기화 함수 사용
print(person) # 문자열화 함수 사용
# 몽키(몸무게 47kg) 리턴