11wk-1: 밈과 클래스 (2)

Author

최규빈

Published

May 15, 2023

강의영상

youtube: https://youtube.com/playlist?list=PLQqh36zP38-y_wMxWRPdN7TE79Ghx8xUA

imports

from IPython.core.display import HTML

예비학습

코드줄바꿈

\: 코드가 길때 줄을 바꾸는 기능

- 예시1

a\
=55
a
55
a=\
33
a
33

- 예시2

a=0.5 
a
0.5

\(a+a^2+a^3+a^4+a^5\) 를 계산하고 싶다면?

(방법1)

a + a**2 + a**3 + a**4 + a**5 
0.96875

(방법2)

a +\
a**2 +\
a**3 +\
a**4 +\
a**5 
0.96875

'''으로 선언하는 문자열

- 예시1

string = '\n1. asdf\n2. sdfa\n3. dfas\n4. fasd\n'
print(string)

1. asdf
2. sdfa
3. dfas
4. fasd
string = \
'''
1. asdf
2. sdfa
3. dfas
4. fasd
'''
print(string)

1. asdf
2. sdfa
3. dfas
4. fasd

- 예시2

string = \
'''
1. asdf
2. sdfa
3. dfas
4. fasd
5. {}
6. {}
'''
print(string.format('aaaa','bbbb'))

1. asdf
2. sdfa
3. dfas
4. fasd
5. aaaa
6. bbbb

문자열 포맷팅

- 예시1

string = \
'''
1. 이름: {}
2. 소속: {}
'''
print(string.format('최규빈','통계학과'))

1. 이름: 최규빈
2. 소속: 통계학과
print(string.format('통계학과','최규빈'))

1. 이름: 통계학과
2. 소속: 최규빈

- 예시2

string = \
'''
1. 이름: {name}
2. 소속: {affiliation}
'''
print(string.format(name='최규빈', affiliation='통계학과'))

1. 이름: 최규빈
2. 소속: 통계학과
print(string.format(affiliation='통계학과',name='최규빈'))

1. 이름: 최규빈
2. 소속: 통계학과

HTML

- 예제1: 텍스트 출력

html_str = '''
<p> 파이썬 프로그래밍 2023 </p>
'''
HTML(html_str)

파이썬 프로그래밍 2023

- 예제2: 텍스트의 스타일변경

html_str = '''
<style>
    .title {
        font-family: "Times New Roman", serif;
        font-size: 30px;
        font-weight: 900;
    }
</style>
<p class="title">파이썬 프로그래밍 2023</p>
'''
HTML(html_str)

파이썬 프로그래밍 2023

- 예제3: 이미지의 삽입

html_str = '''
<img src = https://github.com/guebin/PP2023/blob/main/posts/03_Class/JungGGuckMa.jpg?raw=true>
'''
HTML(html_str)

- 예제4: 텍스트 + 이미지

html_str = '''
<p> 로그전 패배는 괜찮아 </p>
<img src = https://github.com/guebin/PP2023/blob/main/posts/03_Class/JungGGuckMa.jpg?raw=true>
<p> 중요한 건 꺾이지 않는 마음 </p>
'''
HTML(html_str)

로그전 패배는 괜찮아

중요한 건 꺾이지 않는 마음

display

- 아래는 HTML(html_str)의 내용을 명시적으로 display 하는 코드이다.

display(HTML(html_str))

로그전 패배는 괜찮아

중요한 건 꺾이지 않는 마음

- 이것은 마치 아래와 유사함.

a=1
a
1
print(a)
1

중요한 것은 꺽이지 않는 마음

구현

- 기사처럼 보이도록 html_str 을 선언

html_str = '''
<style>
    .title {
        font-family: "Times New Roman", serif;
        font-size: 30px;
        font-weight: 900;
    }
    .text {
        font-family: "Arial", sans-serif;
        font-size: 20px;
        font-style: italic;
    }
    .highlight {
        font-family: "Montserrat", monospace;
        font-size: 35px;
        font-weight: 900;
        text-decoration: underline;
        font-style: normal;
        color: darkblue;
        background-color: #FFFF00;
    }
</style>

<p class="title">RGE전 패배는 괜찮다.</p>
<img src=https://github.com/guebin/PP2023/blob/main/posts/03_Class/JungGGuckMa.jpg?raw=true width="600">
<p> \n </p>
<p class="text"> Q: 로그와 2라운드 재대결, 어떤 점에 유의해야 할까?</p>
<p class="text"> A: 상대팀에 대해서 더 분석할 건 없는 것 같고, 저희가 저희 플레이 잘하는 게 제일 중요한 것 같고 오늘 지긴 했지만 저희끼리만 안 무너지면 충분히 이길 수 있을 것 같아요.
<p class="title">중요한 것은 꺾이지 않는 <span class="highlight">마음</span></p>
'''
display(HTML(html_str))

RGE전 패배는 괜찮다.

Q: 로그와 2라운드 재대결, 어떤 점에 유의해야 할까?

A: 상대팀에 대해서 더 분석할 건 없는 것 같고, 저희가 저희 플레이 잘하는 게 제일 중요한 것 같고 오늘 지긴 했지만 저희끼리만 안 무너지면 충분히 이길 수 있을 것 같아요.

중요한 것은 꺾이지 않는 마음

1단계: 밈의 구상

- 파이썬 프로그래밍 2023 중간고사.

html_str = '''
<style>
    .title {
        font-family: "Times New Roman", serif;
        font-size: 30px;
        font-weight: 900;
    }
    .text {
        font-family: "Arial", sans-serif;
        font-size: 20px;
        font-style: italic;
    }
    .highlight {
        font-family: "Montserrat", monospace;
        font-size: 35px;
        font-weight: 900;
        text-decoration: underline;
        font-style: normal;
        color: darkblue;
        background-color: #FFFF00;
    }
</style>

<p class="title">파이썬 프로그래밍 중간고사 패배는 괜찮다.</p>
<img src=https://github.com/guebin/PP2023/blob/main/posts/03_Class/PP2023mid.jpg?raw=true width="600">
<p> \n </p>
<p class="text"> Q: 파이썬 프로그래밍 기말고사, 어떤 점에 유의해야 할까?</p>
<p class="text"> A: 최규빈 교수 문제 스타일에 대해서 더 분석할 건 없는 것 같고, 제가 제 코드를 잘 구현하는 게 제일 중요한 것 같고 오늘 중간고사는 망하긴 했지만 저 스스로가 안 무너지면 충분히 기말고사는 잘 볼 수 있을 것 같아요.
<p class="title">중요한 것은 꺾이지 않는 <span class="highlight">마음</span></p>
'''
display(HTML(html_str))

파이썬 프로그래밍 중간고사 패배는 괜찮다.

Q: 파이썬 프로그래밍 기말고사, 어떤 점에 유의해야 할까?

A: 최규빈 교수 문제 스타일에 대해서 더 분석할 건 없는 것 같고, 제가 제 코드를 잘 구현하는 게 제일 중요한 것 같고 오늘 중간고사는 망하긴 했지만 저 스스로가 안 무너지면 충분히 기말고사는 잘 볼 수 있을 것 같아요.

중요한 것은 꺾이지 않는 마음

- 이거 왠지 재미있는데?

- 밈의 속성을 추려보자.

  • title: 타이틀에 해당하는 텍스트
  • img: DEFT의 인터뷰 이미지
  • Q: 인터뷰질문에 해당하는 텍스트
  • A: 인터뷰답변에 해당하는 텍스트
  • 중꺽마에서의 “마음”

2단계: 양식틀의 완성 (함수이용)

html_str = '''
<style>
    .title {{
        font-family: "Times New Roman", serif;
        font-size: 30px;
        font-weight: 900;
    }}
    .text {{
        font-family: "Arial", sans-serif;
        font-size: 20px;
        font-style: italic;
    }}
    .highlight {{
        font-family: "Montserrat", monospace;
        font-size: 35px;
        font-weight: 900;
        text-decoration: underline;
        font-style: normal;
        color: darkblue;
        background-color: #FFFF00;
    }}
</style>

<p class="title">{ttl}</p>
<img src={url} width="600">
<p> \n </p>
<p class="text"> {Q}</p>
<p class="text"> {A}</p>
<p class="title">중요한 것은 꺾이지 않는 <span class="highlight">{hl}</span></p>
'''
title = '파이썬 프로그래밍 중간고사 패배는 괜찮다!!!'
imgurl = 'https://github.com/guebin/PP2023/blob/main/posts/03_Class/PP2023mid.jpg?raw=true'
ques = 'Q: 파이썬 프로그래밍 기말고사, 어떤 점에 유의해야 할까?'
ans = 'A: 최규빈 교수 문제 스타일에 대해서 더 분석할 건 없는 것 같고, 제가 제 코드를 잘 구현하는 게 제일 중요한 것 같고 오늘 중간고사는 망하긴 했지만 저 스스로가 안 무너지면 충분히 기말고사는 잘 볼 수 있을 것 같아요.'
highlight = '마음'
_str = html_str.format(
    ttl = title,
    url = imgurl,
    Q = ques,
    A = ans,
    hl = highlight
)
display(HTML(_str))

파이썬 프로그래밍 중간고사 패배는 괜찮다!!!

Q: 파이썬 프로그래밍 기말고사, 어떤 점에 유의해야 할까?

A: 최규빈 교수 문제 스타일에 대해서 더 분석할 건 없는 것 같고, 제가 제 코드를 잘 구현하는 게 제일 중요한 것 같고 오늘 중간고사는 망하긴 했지만 저 스스로가 안 무너지면 충분히 기말고사는 잘 볼 수 있을 것 같아요.

중요한 것은 꺾이지 않는 마음

- 함수의 선언

def show_JungGGuckMa(html_str,title,imgurl,ques,ans,highlight):
    _str = html_str.format(
        ttl = title,
        url = imgurl,
        Q = ques,
        A = ans,
        hl = highlight
    )
    display(HTML(_str))
show_JungGGuckMa(html_str,title,imgurl,ques,ans,highlight)

파이썬 프로그래밍 중간고사 패배는 괜찮다!!!

Q: 파이썬 프로그래밍 기말고사, 어떤 점에 유의해야 할까?

A: 최규빈 교수 문제 스타일에 대해서 더 분석할 건 없는 것 같고, 제가 제 코드를 잘 구현하는 게 제일 중요한 것 같고 오늘 중간고사는 망하긴 했지만 저 스스로가 안 무너지면 충분히 기말고사는 잘 볼 수 있을 것 같아요.

중요한 것은 꺾이지 않는 마음

3단계: 밈놀이 (함수)

t=1 – 밈1: 파이썬 프로그래밍 중간고사

# 필요한 변수들 선언
# show_JungGGuckMa 함수 선언 
# 사용
show_JungGGuckMa(html_str,title,imgurl,ques,ans,highlight)

파이썬 프로그래밍 중간고사 패배는 괜찮다!!!

Q: 파이썬 프로그래밍 기말고사, 어떤 점에 유의해야 할까?

A: 최규빈 교수 문제 스타일에 대해서 더 분석할 건 없는 것 같고, 제가 제 코드를 잘 구현하는 게 제일 중요한 것 같고 오늘 중간고사는 망하긴 했지만 저 스스로가 안 무너지면 충분히 기말고사는 잘 볼 수 있을 것 같아요.

중요한 것은 꺾이지 않는 마음

t=2 – 밈2: 버거킹

ref: https://i2.ruliweb.com/ori/22/12/03/184d62f98aace2c4.png

title = '버거 2개를 골라도 6000원'
imgurl2 = 'https://github.com/guebin/PP2023/blob/main/posts/03_Class/burgerking.png?raw=true'
ques = '기간: 11월28일(월)-12월4일(일)'
ans = '콰트로치즈 와퍼 주니어, 통새우 와퍼 주니어, 롱치킨 버거 최대 42% 할인'
highlight = '할인'
show_JungGGuckMa(html_str,title,imgurl2,ques,ans,highlight)

버거 2개를 골라도 6000원

기간: 11월28일(월)-12월4일(일)

콰트로치즈 와퍼 주니어, 통새우 와퍼 주니어, 롱치킨 버거 최대 42% 할인

중요한 것은 꺾이지 않는 할인

t=3 – 밈1변경: 중요한 것은 꺾이지 않는 “집중력”

title = '파이썬 프로그래밍 중간고사 패배는 괜찮다!!!'
imgurl = 'https://github.com/guebin/PP2023/blob/main/posts/03_Class/PP2023mid.jpg?raw=true'
ques = 'Q: 파이썬 프로그래밍 기말고사, 어떤 점에 유의해야 할까?'
ans = 'A: 최규빈 교수 문제 스타일에 대해서 더 분석할 건 없는 것 같고, 제가 제 코드를 잘 구현하는 게 제일 중요한 것 같고 오늘 중간고사는 망하긴 했지만 저 스스로가 안 무너지면 충분히 기말고사는 잘 볼 수 있을 것 같아요.'
highlight = '집중력'
show_JungGGuckMa(html_str,title,imgurl,ques,ans,highlight)

파이썬 프로그래밍 중간고사 패배는 괜찮다!!!

Q: 파이썬 프로그래밍 기말고사, 어떤 점에 유의해야 할까?

A: 최규빈 교수 문제 스타일에 대해서 더 분석할 건 없는 것 같고, 제가 제 코드를 잘 구현하는 게 제일 중요한 것 같고 오늘 중간고사는 망하긴 했지만 저 스스로가 안 무너지면 충분히 기말고사는 잘 볼 수 있을 것 같아요.

중요한 것은 꺾이지 않는 집중력

- 수정이 아니라 거의 새로 만든 수준인데?

t=4 – 밈2변경: 버거 종류 수정

- 귀찮아서…

이러한 코드의 비판

- 변수들이 정리가 되어있지 않고 산만함

3단계: 밈놀이 (클래스)

class JungKKuckMa:
    pass 

t=1 – 밈1: 파이썬 프로그래밍 중간고사

pp2023 = JungKKuckMa()
pp2023
<__main__.JungKKuckMa at 0x7f101ca06fd0>

(참고) 여기에서 pp2023.을 치고 tab을 눌러도 아무런 변화가 없음.

pp2023.title = '파이썬 프로그래밍 중간고사 패배는 괜찮다!!!'
pp2023.imgurl = 'https://github.com/guebin/PP2023/blob/main/posts/03_Class/PP2023mid.jpg?raw=true'
pp2023.ques = 'Q: 파이썬 프로그래밍 기말고사, 어떤 점에 유의해야 할까?'
pp2023.ans = 'A: 최규빈 교수 문제 스타일에 대해서 더 분석할 건 없는 것 같고, 제가 제 코드를 잘 구현하는 게 제일 중요한 것 같고 오늘 중간고사는 망하긴 했지만 저 스스로가 안 무너지면 충분히 기말고사는 잘 볼 수 있을 것 같아요.'
pp2023.highlight = '마음'
pp2023.html_str =\
'''
<style>
    .title {{
        font-family: "Times New Roman", serif;
        font-size: 30px;
        font-weight: 900;
    }}
    .text {{
        font-family: "Arial", sans-serif;
        font-size: 20px;
        font-style: italic;
    }}
    .highlight {{
        font-family: "Montserrat", monospace;
        font-size: 35px;
        font-weight: 900;
        text-decoration: underline;
        font-style: normal;
        color: darkblue;
        background-color: #FFFF00;
    }}
</style>

<p class="title">{ttl}</p>
<img src={url} width="600">
<p> \n </p>
<p class="text"> {Q}</p>
<p class="text"> {A}</p>
<p class="title">중요한 것은 꺾이지 않는 <span class="highlight">{hl}</span></p>
'''

(참고) 이 상태에서 pp2023. + tab 을 하면 아래와 같이 보인다.

image.png
def show(pp2023):
    _str = pp2023.html_str.format(
        ttl = pp2023.title,
        url = pp2023.imgurl,
        Q = pp2023.ques,
        A = pp2023.ans,
        hl = pp2023.highlight
    )
    display(HTML(_str))
show(pp2023)

파이썬 프로그래밍 중간고사 패배는 괜찮다!!!

Q: 파이썬 프로그래밍 기말고사, 어떤 점에 유의해야 할까?

A: 최규빈 교수 문제 스타일에 대해서 더 분석할 건 없는 것 같고, 제가 제 코드를 잘 구현하는 게 제일 중요한 것 같고 오늘 중간고사는 망하긴 했지만 저 스스로가 안 무너지면 충분히 기말고사는 잘 볼 수 있을 것 같아요.

중요한 것은 꺾이지 않는 마음

t=2 – 밈2: 버거킹

burger = JungKKuckMa()
burger
<__main__.JungKKuckMa at 0x7f101ca069d0>

(참고) 여기에서 burger.을 치고 tab을 눌러도 아무런 변화가 없음.

burger.title = '버거 2개를 골라도 6000원'
burger.imgurl = 'https://github.com/guebin/PP2023/blob/main/posts/03_Class/burgerking.png?raw=true'
burger.ques = '기간: 11월28일(월)-12월4일(일)'
burger.ans = '콰트로치즈 와퍼 주니어, 통새우 와퍼 주니어, 롱치킨 버거 최대 42% 할인'
burger.highlight = '할인'
burger.html_str =\
'''
<style>
    .title {{
        font-family: "Times New Roman", serif;
        font-size: 30px;
        font-weight: 900;
    }}
    .text {{
        font-family: "Arial", sans-serif;
        font-size: 20px;
        font-style: italic;
    }}
    .highlight {{
        font-family: "Montserrat", monospace;
        font-size: 35px;
        font-weight: 900;
        text-decoration: underline;
        font-style: normal;
        color: darkblue;
        background-color: #FFFF00;
    }}
</style>

<p class="title">{ttl}</p>
<img src={url} width="600">
<p> \n </p>
<p class="text"> {Q}</p>
<p class="text"> {A}</p>
<p class="title">중요한 것은 꺾이지 않는 <span class="highlight">{hl}</span></p>
'''

(참고) 이 순간은 burger. + tab 을 하면 아래와 같이 나온다.

- show() 함수는 재사용가능하겠는데?

# def show(pp2023):
#     _str = pp2023.html_str.format(
#         ttl = pp2023.title,
#         url = pp2023.imgurl,
#         Q = pp2023.ques,
#         A = pp2023.ans,
#         hl = pp2023.highlight
#     )
#     display(HTML(_str))
  • pp2023, burger 를 show 함수의 입력 x로 생각해도 무방
show(burger)

버거 2개를 골라도 6000원

기간: 11월28일(월)-12월4일(일)

콰트로치즈 와퍼 주니어, 통새우 와퍼 주니어, 롱치킨 버거 최대 42% 할인

중요한 것은 꺾이지 않는 할인

t=3 – 밈1변경: 중요한 것은 꺾이지 않는 “집중력”

pp2023.highlight = '집중력'
show(pp2023)

파이썬 프로그래밍 중간고사 패배는 괜찮다!!!

Q: 파이썬 프로그래밍 기말고사, 어떤 점에 유의해야 할까?

A: 최규빈 교수 문제 스타일에 대해서 더 분석할 건 없는 것 같고, 제가 제 코드를 잘 구현하는 게 제일 중요한 것 같고 오늘 중간고사는 망하긴 했지만 저 스스로가 안 무너지면 충분히 기말고사는 잘 볼 수 있을 것 같아요.

중요한 것은 꺾이지 않는 집중력

t=4 – 밈2변경: 버거 종류 수정

burger.ans = '기네스콰트로치즈와퍼, 기네스와퍼, 몬스터와퍼, 몬스터X 최대 XX% 할인' 
show(burger)

버거 2개를 골라도 6000원

기간: 11월28일(월)-12월4일(일)

기네스콰트로치즈와퍼, 기네스와퍼, 몬스터와퍼, 몬스터X 최대 XX% 할인

중요한 것은 꺾이지 않는 할인

코드의 복습 + 대응하는 용어의 정리

- 코드조각1: 아래의 과정은 “JungKKuckMa라는 이름의 클래스를 선언한다.” 라고 표현한다.

class JungKKuckMa:
    pass 
  • ’JungKKuckMa.HWP’라는 빈 한글파일을 만들어 두는 과정이라 비유할 수 있다.

- 코드조각2: 아래의 과정은 “JungKKuckMa라는 클래스에서 pp2023이라는 인스턴스를 생성시켰다.” 고 표현한다.

pp2023 = JungKKuckMa()
pp2023
<__main__.JungKKuckMa at 0x7f101ca06fa0>
  • 만들어둔 ‘JungKKuckMa.HWP’를 Ctrl + C,V 하여 새로운 hwp파일을 만들고 파일이름을 ’pp2023.HWP’ 파일로 변경한 상황으로 비유하라 수 있다.
  • 느낌: ’JungKKuckMa.HWP’에서 ’pp2023.HWP’이 태어난 느낌!!

- 코드조각3: 아래의 과정은 pp2023 안의 소속된 변수를 정의한다.

  • 여기에서 정의된 pp2023.title 등을 “pp2023의 attribute” 라고 표현한다.
pp2023.title = '파이썬 프로그래밍 중간고사 패배는 괜찮다!!!'
pp2023.imgurl = 'https://github.com/guebin/PP2023/blob/main/posts/03_Class/PP2023mid.jpg?raw=true'
pp2023.ques = 'Q: 파이썬 프로그래밍 기말고사, 어떤 점에 유의해야 할까?'
pp2023.ans = 'A: 최규빈 교수 문제 스타일에 대해서 더 분석할 건 없는 것 같고, 제가 제 코드를 잘 구현하는 게 제일 중요한 것 같고 오늘 중간고사는 망하긴 했지만 저 스스로가 안 무너지면 충분히 기말고사는 잘 볼 수 있을 것 같아요.'
pp2023.highlight = '마음'
pp2023.html_str =\
'''
<style>
    .title {{
        font-family: "Times New Roman", serif;
        font-size: 30px;
        font-weight: 900;
    }}
    .text {{
        font-family: "Arial", sans-serif;
        font-size: 20px;
        font-style: italic;
    }}
    .highlight {{
        font-family: "Montserrat", monospace;
        font-size: 35px;
        font-weight: 900;
        text-decoration: underline;
        font-style: normal;
        color: darkblue;
        background-color: #FFFF00;
    }}
</style>

<p class="title">{ttl}</p>
<img src={url} width="600">
<p> \n </p>
<p class="text"> {Q}</p>
<p class="text"> {A}</p>
<p class="title">중요한 것은 꺾이지 않는 <span class="highlight">{hl}</span></p>
'''
  • ‘pp2023.HWP’ 라는 문서안에 내용을 채우는 과정이라고 비유할 수 있다.

- 코드조각4: 아래의 과정은 클래스에서 생성된 인스턴스를 입력으로 받아서 어떠한 동작을 수행할 함수를 정의

def show(pp2023):
    _str = pp2023.html_str.format(
        ttl = pp2023.title,
        url = pp2023.imgurl,
        Q = pp2023.ques,
        A = pp2023.ans,
        hl = pp2023.highlight
    )
    display(HTML(_str))
  • 특징: show의 입력은 너무 깔끔하다. 클래스에서 생성된 인스턴스의 이름을 받아서 여러변수를 한번에 정리하였음.

- 코드조각5: 아래의 과정은 생성된 인스턴스를 입력으로 받아서 어떠한 함수를 수행하는 과정이다.

# show(pp2023)
# show(burger)
  • show 라는 버튼을 눌러서 ‘pp2023.HWP’ 혹은 ‘burger.HWP’ 를 보는 느낌
  • show 라는 버튼은 ‘pp2023.HWP’ 혹은 ‘burger.HWP’ 외부에서 독립적으로 선언된 함수임.

숙제

없습니다