728x90
반응형

 

* 본 포스터는 주피터 노트북에서 실행하였다.

 

클래스 정의

  • 프로그램 상에서 사용되는 속성과 행위를 모아놓은 집합체
  • 객체의 설계도 혹은 템플릿 (형틀 template)

인스턴스 정의

  • 클래스로부터 만들어지는 각각의 개별적인 객체
  • 서로 다른 인스턴스는 서로 다른 속성 값을 가질 수 있음

 

클래스 정의방법

  • class라는 키워드를 써 준 후 class의 이름을 써 준다. 그 후 필요한 속성과 메소드를 파이썬 문법에 맞게 써준다
# 클래스 정의
class Cat:
    def meow(self,i):
        print('야옹 야옹',i)
    def cow(self, t, u):
        print(t+u)
  • 클래스 내부에서 정의되어 클래스나 클래스 인스턴스가 사용하는 함수를 메소드method 혹은 멤버함수member function라 한다.
  • meow() 메소드의 매개변수인 self는 자기 자신을 참조하는 변수이며 메소드의 첫 번째 매개 변수로 반드시 들어가야 한다.
nabi = Cat() #객체 생성
nabi.meow(3)
nabi.cow(3,5)

 

클래스에서 생성자 정의

# 클래스 정의
class Cat:
    #생성자 정의
    def __init__(self,name,color): #생성자
        self.name=name #self가 들어가면 멤버변수
        self.color=color
    #메서드 (멤버함수)
    def meow(self):
        print('내이름은 {}, 색깔은 {} 이야~'.format(self.name, self.color))
nabi = Cat('나비','검정색')
nero = Cat('네로','흰색')
mimi = Cat('미미','갈색')
nabi.meow()
nero.meow()
mimi.meow()

 

Cat 객체의 문자열 표현 방식 / __str__ 메소드 적용하기

# 클래스 정의
class Cat:
    #생성자 정의
    def __init__(self,name,color): #생성자
        self.name=name #self가 들어가면 멤버변수
        self.color=color
    #Cat 객체의 문자열 표현 방식
    def __str__(self): #toString과 동일
        return 'Cat(name=' +self.name+' 색상= '+self.color+')'
nabi = Cat('나비','검정색')
mimi = Cat('미미','갈색')
print(nabi)
print(mimi)

 

 

캡슐화 encapsulation

  • 메소드와 변수를 외부에서 함부로 조작하는 것을 제한
  • 데이터를 보호
  • 우연히 값이 변경되는 것을 방지
# 클래스 정의
class Cat:
    #생성자 정의
    def __init__(self,name,age): #생성자
        self.name=name #self가 들어가면 멤버변수
        self.age=age
    #Cat 객체의 문자열 표현 방식
    def __str__(self): #toString과 동일
        return 'Cat(name=' +self.name+' age= '+str(self.age)+')'
nabi = Cat('나비',3)
print(nabi)
nabi.age=4
nabi.age=-5
print(nabi)

멤버변수 값이 바뀐걸 확인할 수 있다. -> 데이터 보호(은닉/캡슐화)가 안됨

 

# 클래스 정의
class Cat:
    #생성자 정의
    def __init__(self,name,age): #생성자
        self._name=name #self가 들어가면 멤버변수
        self._age=age
    #Cat 객체의 문자열 표현 방식
    def __str__(self): #toString과 동일
        return 'Cat(name=' +self._name+' age= '+str(self._age)+')'
    def set_age(self, age):
        if age>0:
            self._age = age
    def get_age(self):
        return self._age
nabi = Cat('나비',3)
print(nabi)
#_ 접근 가능하지만 _로 시작하는 변수는 바로 접근하지 말자는 약속  데이터는 바로 접근 x
nabi.set_age(4)
nabi.set_age(-5)
print(nabi)

 

nabi.set_age(-5)는 적용이 되지 않음을 확인할수 있다. 함수를 이렇게 저장했기 때문이다!

Cat 클래스

 

_로 시작하는 변수는 바로 접근하지 말자는 약속이 있다. getter, setter를 이용해서 하자~! 

728x90
반응형
728x90
반응형

* tutle 기본 명령어

 

import turtle as t

- turtle 모듈을 불러오고 turtle 대신 t를 사용한다.

- 예로 turtle.forward(10) 이 아닌 t.forward(10)의 형식을 사용한다.

 

turtle.forward(100)

- 앞으로 이동하기100 픽셀 만큼 머리 방향으로 이동

- turtle.fd()로 사용 가능

 

turtle.backward(100)

- 뒤로 이동하기 100픽셀 만큼 머리 반대 방향으로 이동

- turtle.back() / turtle.bk()으로 사용 가능

 

turtle.right(90)

- 거북이 객체를 머리 방향에서 오른쪽으로 90도 회전

- turtle.rt()로 사용 가능

 

turtle.left(90)

- 왼쪽으로 회전하기 머리 방향에서 왼쪽으로 90도 회전

- turtle.lt()로 사용 가능

 

turtle.pencolor("yellow")

- 펜 색깔을 노란색으로 설정

 

turtle.fillcolor("yellow")

- 칠하는 색깔을 노란색으로 설정

import turtle as t
t.setup(width=400,height=400)
for i in range(200):
    t.forward(i)
    t.left(93)
t.done()

t.setup(width=400,height=400)
t.forward(100)
t.left(90)
t.forward(100)
t.done()

728x90
반응형
728x90
반응형
import math as m
m.sin(0.0) #0도

m.sin(10.0) #10도

 

m.sin(3.141592/2.0) #phi=3.141592 , 2*phi => radian =360도 #sin90도=1

 

sin() 안에 값을 radian으로 표현해 보자 비례식으로 구할 수 있다.

 

phi=3.141592
m.sin((2*phi*90)/360) #radian으로 표현한 것

 

이와 같은 방식으로 cos 45를 구해보았다.

 

#cos 45구하기
m.cos((2*phi*45)/360)

 

 

728x90
반응형
728x90
반응형

* 본 포스팅은 주피터 노트북에서 실행하였다.

 

import time
seconds = time.time()
seconds #초단위로 표시

 

print('바로 출력되는 구문')
time.sleep(4.5)
print('4.5초후 출력되는 구문')

 

start_time=time.time()
for _ in range(5):
    print('값', 1+2+3+4+6+8+10)
end_time = time.time()
gap = end_time - start_time
print('경과 시간은 : ',gap)

728x90
반응형
728x90
반응형

* 본 포스팅은 주피터 노트북에서 실행하였다.

 

import datetime
datetime.datetime.now()

 

today = datetime.date.today()
today

 

.year , .month, .day로 년, 월, 일을 확인할 수 있다.

 

파이썬 내장함수

dir(datetime) # __ => double under , dunder , 파이썬 내장함수, 내장 데이터 타입

 

import datetime as dt #dt로 rename하기
start_time = dt.datetime.now()
start_time

 

replace 이용하여 시간 바꾸기

start_time.replace(month=12, day=22) #시간 바꾸기

 

남은 시간 구하기

today = dt.date.today()
xMas = dt.datetime(2021, 12, 25)
time_gap = xMas - dt.datetime.now()
print('올해 크리스마스 까지는 {}일 {}시간 남았다.'.format(time_gap.days,time_gap.seconds//3600))

 

728x90
반응형
728x90
반응형

* 본 포스팅은 주피터 노트북에서 실행하였다.

 

a=[10,20,30]
b={'ten','twenty','thirty'}
for val in zip(a,b):
    print(val)

 

str_list=['hello','world','python','rokcs']
int_tuple=(1,2,3)
int_list=[400,500,600,700,800]

my_iterator = zip(str_list, int_tuple, int_list)
list(my_iterator)

 

 

zip으로 묶여진 튜플들을 다시 풀어내는 방법

 

zip_lst = list(zip(str_list, int_list, int_tuple))
a,b,c = zip(*zip_lst)
print('a: {}, b: {}, c: {}'.format(a,b,c))

728x90
반응형
728x90
반응형

* 본 포스팅은 주피터 노트북에서 실행했다.

 

def product_set(set1,set2):
    res=set()
    for i in set1:
        for j in set2:
            res = res | {(i,j)}
    return res
A = {1,3}
B = {2,4}
AxB = product_set(A,B)
print('A= ',A)
print('B= ',B)
print('AxB= ',AxB)

SQL의 Cross Join과 동일하다. 데카르트의 곱

 

곱집합 함수를 이용한 집합의 세제곱 연산

def product_set(set1,set2):
    res=set()
    for i in set1:
        for j in set2:
            res = res | {(i,j)}
    return res
def exp(input_set, exponent):
    res=input_set
    for _ in range(exponent-1):
        res=product_set(res,input_set) #호출한 결과를 res에 누적하여 반환함
    return res
A = {1,3}
A3 = exp(A,3) #집합 A에 대하셔 거듭 제곱을 3회 수행함
print(A3)

 

이를 참고하여 주사위를 두번 던졌을 때 가지수를 구해보자

cases={1,2,3,4,5,6}
cases_2times = product_set(cases, cases)
cases_2times #주사위 두번던졌을 때 가지수

 

#주사위 2번 던졌을 때 set이라 36이 안나오고 11가지 밖에 없음
sum_set ={sum(tup) for tup in cases_2times}
sum_set

 

위 코드를 list로 변환해 보았다.

sum_set =[sum(tup) for tup in cases_2times]
len(sum_set)

 

주사위 3번 던졌을 때 경우의 수 구하기

def tuple_sum(tup):
    if isinstance(tup, int): #tup가 정수(int) 형이면 tup을 반환
        return tup
    else:
        accum=0
        for element in tup:
            accum += tuple_sum(element) #재귀적 호출, 자기 자신 호출
    return accum
def product_set(set1,set2):
    res=set()
    for i in set1:
        for j in set2:
            res = res | {(i,j)}
    return res
cases_3times = product_set(cases, cases_2times)
sums={tuple_sum(tup) for tup in cases_3times}
sums

 

728x90
반응형
728x90
반응형

* 본 포스팅은 주피터 노트북에서 실행하였다.

 

s1 = {i for i in range(1,7)}
s1

 

s2 = {i for i in range(4,10)} #set comprehension
s2

 

합집합

 

교집합

 

차집합

 

두 집합이 서로소인지 확인하기 -> isdisjoint 사용하면 된다.

s1 = {1,2,3}
s2 = {10,20,30}

 

 

 

728x90
반응형
728x90
반응형

* 본 포스팅은 주피터 노트북에서 실행하였다.

 

  • 리스트로부터 집합 만들기
days_list=['Mon', 'Tue','Wed','Thu','Fri','Sat','Sun']
days_set = set(days_list)
days_set

 

  • 튜플로부터 집합 만들기
fruts_tuple=('apple','orange','water melon')
fruits_set = set(fruts_tuple)
fruits_set

 

  • 문자열로부터 집합 만들기
h_str='hello'
h_set=set(h_str)
h_set

 

#set은 중복을 없앤다.

s={100,100,200,200,300,400}
s

 

s.add(500) #추가
s

 

s.discard(100) # 삭제
s

 

 

728x90
반응형
728x90
반응형

* 본 포스팅은 주피터 노트북에서 진행했다.

 

#튜플
t0=(10,20,30)
t0

 

t0+t0

 

튜플은 리스트와 똑같은데 차이점은 수정이 안된다. 읽어오기만 할 수 있다.

 

 

예제

def area_and_circle(radius):
    area = 3.14*radius**2
    circum = 2*3.14*radius
    return area, circum

type()을 이용해 형식을 살펴보니 tuple이다...

 

r=5
a,c=area_and_circle(r)
print('반지름 {}인 원의 면적의 둘래는 {},{}'.format(r,a,c))

 

반환 값을 하나(tuple)이고 반환받은 곳에서 unpacking 되어 하나씩 가져다 사용 가능하다.

728x90
반응형

+ Recent posts