반응형

 

 

 

 

List

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문 ]

 

예시 )

list1 = [ i for i in range(1,101) if i % 8 == 0]

print("list1 : ", list1)
list1 :  [8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96]

 

 

 

 

Dictionary

Dictionary Comprehension

  • 파이썬의 유용한 도구
  • 예시
    • { "{}번".format(number):name for number, name in enumerate(students) } # [ 형식 for문 ]
    • {student:score for student, score in zip(students, scores)}

 

예시 )

product_list = ["풀", "가위", "크래파스"]
price_list = [800, 2500, 5000]
product_dict = { x : y for x, y in zip(product_list, price_list) }

print(product_dict)
{'풀': 800, '가위': 2500, '크래파스': 5000}

 

 

 

 

 

 

 

 

 

반응형
반응형

 

 

 

 

상속(Inheritance)

  • 상속하는 클래스를 부모 클래스
  • 상속받는 클래스를 자식 클래스
  • 자식 클래스가 부모 클래스의 내용을 가져다 쓸 수 있는 것

 

class Animal( ):
    def walk( self ):
        print( "걷는다" )

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

class Human( Animal ):
    def wave( self ):
        print( "손을 흔든다" )

class Dog( Animal ):
    def wag( self ):
        print( "꼬리를 흔든다" )

 

 

궁금한 점 !

두 개 이상의 클래스를 상속받을 수는 없나요?

# 다중 상속
class Person():
    def walk(self):
        print("걷는다")
    def eat(self):
        print("먹는다")

class Student():
    def study(self):
        print("공부한다")

class Me(Person, Student):
    def grow(self):
        print("자란다")

 

이렇게 두 개의 클래스를 작성하면 된다.

 

 

 

 

 

단순 오버라이드

오버라이드(Override)

  • 같은 이름을 가진 메소드를 덮어 쓴다는 의미
class Animal( ):
    def greet( self ):
        print( "인사한다" )

class Human( Animal ):
    def greet( self ):
        print( "손을 흔든다" )

class Dog( Animal ):
    def greet( self ):
        print( "꼬리를 흔든다" )

 

예시 )

class Car():
    
    def run(self):
        print("차가 달립니다.")


class Truck(Car):
    
    def load(self):
        print("짐을 실었습니다.")
    # 이 아래에서 run 메소드를 오버라이드 하세요.
    def run(self):
        print("트럭이 달립니다.")
    
truck = Truck()
truck.run()
트럭이 달립니다.

 

 

 

 

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을 상속 받는 MyException클래스를 정의하세요.
class MyException(Exception):
    """아무꺼나"""
    
    
shops = {
    "송일문방구": {"가위": 500, "크레파스": 3000},
    "알파문구": {"풀": 800, "도화지": 300, "A4용지": 8000},
    "다이소": {"풀": 500, "목공본드": 2000, "화분": 3000}
}


try:
    for shop, products in shops.items():
        for product, price in products.items():
            if product == '풀':
                print("{}: {}원".format(shop, price))
                raise MyException
except MyException:
    print("풀을 찾았습니다.")

 

 

 

 

 

 

 

 

반응형
반응형

 

 

 

모델링(modeling)

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

 

 

메소드(Method)

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

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

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

    def eat( 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 매개변수는 생략하고 전달
class Car():
    '''자동차'''
    def run( self ):
        print("{}가 달립니다.".format(self.name))


taxi = Car()
taxi.name = "택시"
taxi.run()

 

 

 

 

 

 

특수한 메소드

초기화 함수

  • __init__ : 인스턴스를 만들 때 실행되는 함수

문자열화 함수

  • __str__ : 인스턴스 자체를 출력 할 때의 형식을 지정해주는 함수
class Human( ):
    '''인간'''
    def __init__( self, name, weight ):
        '''초기화 함수'''
        self.name = name
        self.weight = weight

    def __str__( self )
        '''문자열화 함수
        return "{} ( 몸무게 {}kg )".format( self.name, self.weight )

person = Human( "사람", 60.5 ) # 초기화 함수 사용
print( person ) # 문자열화 함수 사용

 

예시 )

class Human():
    
    def __init__(self, name, weight):
        self.name = name
        self.weight = weight
    
    def __str__(self):
        return "{} (몸무게 {}kg)".format(self.name, self.weight)
    
    def eat(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클래스의 인스턴스로 만들어보세요.
person = Human("두리", 3.2)
person.walk()
person.walk()
person.eat()

print(person)

 

 

 

 

반응형
반응형

 

 

 

자료형 다루기

자료형

  • type( a ) # type( 변수명 ) : 자료형
  • isinstance( 42, int ) # isinstance( 값, 자료형 ) : 자료형 검사

 

my_list = [1, 2, 3]
my_dict = {"풀": 800, "색연필": 3000}
my_tuple = (1, 2, 3)
number = 10
real_number = 3.141592

print(type(my_list))
print(type(my_dict))
print(type(my_tuple))
print(type(number))
print(type(real_number))
<class 'list'>
<class 'dict'>
<class 'tuple'>
<class 'int'>
<class 'float'>

 

 

 

 

인스턴스 이해

클래스

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

인스턴스

  • 클래스에 의해 생성된 객체
  • 인스턴스 각자 자신의 값을 가지고 있다.

 

 

list1과 list2의 값은 같지만, 다른 인스턴스이다.

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는 다른 인스턴스입니다.

 

 

list1과 list2 모두 list 클래스의 인스턴스이다.

list1 = list(range(10))
list2 = [1, 2, 3]

if isinstance( list1, list) and isinstance( list2, list):
    print("list1과 list2는 둘 다 list클래스 입니다.")

 

 

 

 

클래스 만들기

클래스 선언

class Human( ):
    '''사람'''

인스턴스 생성

person1 = Human( )
person2 = Human( )

 

  • 클래스와 인스턴스를 이용하면 데이터와 코드를 사람이 이해하기 쉽게 포장할 수 있다.
class Car():
    '''자동차'''

taxi = Car()

# taxi.name에 "택시"라는 값을 저장하세요.
taxi.name = "택시"

 

 

 

반응형
반응형

 

 

** 시작 인덱스는 포함하고 !  끝 인덱스는 포함하지 않는다 !

slicing

  • 리스트나 문자열에서 값을 여러개 가져오는 기능
text = "hello world"
text = text[ 1:5 ]

list = [ 0, 1, 2, 3, 4, 5 ]
list = list[ 1:3 ]
  • slice를 하면 해당하는 부분의 리스트나 문자열을 새로 만들어 준다.

  • 시작과 끝부분을 얻어 오는 방법

    • list[ 2: ] : 인덱스 2번째부터 끝까지 반환
    • list[ : 2 ] : 처음부터 인덱스 2번째 전까지 반환
    • list[ : ] : 처음부터 끝까지 전부 반환
    •  
text = "hello world"
text[1:5]         # ello          1번째부터 5번째 전까지
text[3:]          # lo world      3번째부터 끝까지
text[:3]          # hel           처음부터 3번째까지
text[:]           # hello world   처음부터 끝까지

 

 

 

 

Slice의 step

step

  • slice한 값의 범위에서 step 값을 주어 그 값만큼 건너뛰어 가져오는 기능
  • list[ 시작값:끝값:step ]

 

 

Slice로 리스트 수정하기

slice 활용

  • 삭제
    • del list[ :5 ] : 처음부터 5번째까지 삭제
  • 수정
    • list[ 1:3 ] = [ 77, 88 ]
    • list[ 1:3 ] = [ 77, 88 ,99 ] : 더 많은 개수로 변환
    • list[ 1:4 ] = [ 8 ] : 더 적은 개수로 변환

 

 

 

반응형
반응형

 

 

 

 

 

www.acmicpc.net/problem/10757

 

10757번: 큰 수 A+B

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

 

코드

a, b = map(int, input().split())
print(a+b)

 

 

파이썬에서 다룰 수 있는 제일 큰 수는 몇일까?

파이썬은 10,000자리 자연수도 자유롭게 다룰 수 있다고 한다!!

 

 

 

 

 

파이썬 정수 최대값은 몇일까? 정최몇?

파이썬 2

import sys

t1 = sys.maxint
t2 = sys.maxint+1 #int범위를 넘으면 long으로 자동으로 형 변환

print(t1)
print(t2)
print(type(t1))
print(type(t2))
9223372036854775807
9223372036854775808
<type 'int'>
<type 'long'>

 

 

 

파이썬 3

import sys

t1 = sys.maxsize
t2 = sys.maxsize+1 #이것도 type int

print(t1)
print(t2)
print(type(t1))
print(type(t2))
9223372036854775807
9223372036854775808
<class 'int'>
<class 'int'>

 

 

파이썬3부터는 maxsize 넘어가도 int형으로 인식한다.

 

 

 

 

 

반응형

+ Recent posts