230413_제로베이스데이터스쿨_파이썬중급문풀_리뷰노트

김지태·2023년 4월 14일
0
post-thumbnail

05_054 클래스 2 상속

모듈 파일 - smartTV.py

class NormalTv:
def init(self, i = 32, c = 'black', r = 'full-HD'):
self.inch = i
self.color = c
self.resolution = r
self.smartTv = 'off'
self.aiTv = 'off'

def turnOn(self):
print('TV power on!!')

def turnOff(self):
print('TV power off!!')

def printTvInfo(self):
print(f'inch: {self.inch}inch')
print(f'color: {self.color}')
print(f'resolution: {self.resolution}')
print(f'smartTv: {self.smartTv}')
print(f'aiTv: {self.aiTv}')

class Tv4k(NormalTv):

def init(self, i, c, r = '4k'):
super().init(i, c, r)

def setSmartTv(self, s):
self.smartTv = s

class Tv8k(NormalTv):

def init(self, i, c, r = '8k'):
super().init(i, c, r)

def setSmartTv(self, s):
self.smartTv = s

def setAiTv(self, a):
self.aiTv = a

실행 파일

import smartTV as st

my4KTv = st.Tv4k('65', 'silver', '4k')
my4KTv.setSmartTv('On')
my4KTv.turnOn()
my4KTv.printTvInfo()
my4KTv.turnOff()

friend4KTv = st.Tv4k('55', 'white', '4k')
friend4KTv.setSmartTv('Off')
friend4KTv.turnOn()
friend4KTv.printTvInfo()
friend4KTv.turnOff()

my8KTv = st.Tv8k('75', 'black', '8k')
my8KTv.setSmartTv('On')
my8KTv.setAiTv('On')
my8KTv.turnOn()
my8KTv.printTvInfo()
my8KTv.turnOff()

friend8KTv = st.Tv8k('86', 'red', '8k')
friend8KTv.setSmartTv('On')
friend8KTv.setAiTv('Off')
friend8KTv.turnOn()
friend8KTv.printTvInfo()
friend8KTv.turnOff()

TV power on!!
inch: 65inch
color: silver
resolution: 4k
smartTv: On
aiTv: off
TV power off!!
TV power on!!
inch: 55inch
color: white
resolution: 4k
smartTv: Off
aiTv: off
TV power off!!
TV power on!!
inch: 75inch
color: black
resolution: 8k
smartTv: On
aiTv: On
TV power off!!
TV power on!!
inch: 86inch
color: red
resolution: 8k
smartTv: On
aiTv: Off
TV power off!!

05_055 클래스 3 / 객체를 이요해서 도서 관리 프로그램 만들기

모듈파일 - book.py

class Book:

def init(self, name, price, isbn):
self.name = name
self.price = price
self.isbn = isbn

책을 저장, 관리하는 클래스

class BookRepository:

def init(self):
self.bDic = {} # -> 초기 생성, 딕셔너리를 이용해서 책 정보를 저장하고 관리 / 데이터베이스가 없으니

def registBook(self, b):
self.bDic[b.isbn] = b # 키 값은 isbn, 책 한 권을 그대로 다 저장한다

def removeBook(self, isbn):
del self.bDic[isbn]

def printBooksInfo(self):
for isbn in self.bDic.keys():
b = self.bDic[isbn] #

def printBooksInfo(self):
for isbn in self.bDic.keys():
b = self.bDic[isbn]

실행 파일 - ex

05_056 클래스 4 한영 한일 사전 추상 클래스 만들기

클래스에 기본적인 형태 단어 등록, 전자 사전인 경우 등록, 삭제, 수정, 조회하는 기능의 추상클래스 만들고, 상속시켜 한영, 한일 클래스 만들기

모듈 파일 - ADictionary.py

from abc import ABCMeta
from abc import abstractmethod

class AbsDictionary(metaclass = ABCMeta): # 추상클래스 명시
def init(self):
self.wordDic = {}

@abstractmethod # 추상 메서드가 되려면 '@ -' 써야함
def registWord(self, w1, w2):
pass # 추상클래스의 메서드는 구현하면 안된다.

@abstractmethod
def removeWord(self, w1):
pass

@abstractmethod
def updateWord(self, w1, w2):
pass

@abstractmethod
def searchWord(self, w1):
pass

이 추상 클래스를 토대로 한영 사전을 만든다

class KorToEng(AbsDictionary):
def init(self):
super().init()

def registWord(self, w1, w2):
print(f'[KorToEng] registWord() : {w1} to {w2}')
self.wordDic[w1] = w2

def removeWord(self, w1):
print(f'[KorToEng] removeWord() : {w1} ')
del self.wordDic[w1]

def updateWord(self, w1, w2):
print(f'[KorToEng] updateWord() : {w1} to {w2}')
self.wordDic[w1] = w2

def searchWord(self, w1):
print(f'[KorToEng] searchWord() : {w1}')
return self.wordDic[w1]

# 검색하는 거니까 return

def printWords(self):
for k in self.wordDic:
print(f'{k}: {self.wordDic[k]}')

이 추상 클래스를 토대로 한일 사전을 만든다

class KorToJpa(AbsDictionary):
def init(self):
super().init()

def registWord(self, w1, w2):
print(f'[KorToJpa] registWord() : {w1} to {w2}')
self.wordDic[w1] = w2

def removeWord(self, w1):
print(f'[KorToJpa] removeWord() : {w1} ')
del self.wordDic[w1]

def updateWord(self, w1, w2):
print(f'[KorToJpa] updateWord() : {w1} to {w2}')
self.wordDic[w1] = w2

def searchWord(self, w1):
print(f'[KorToJpa] searchWord() : {w1}')
return self.wordDic[w1]

# 검색하는 거니까 return

def printWords(self):
for k in self.wordDic:
print(f'{k}: {self.wordDic[k]}')

실행파일

import ADictionary as dic

kTe = dic.KorToEng()

kTe.registWord('책', 'bok')
kTe.registWord('나비', 'butterfly')
kTe.registWord('연필', 'pencil')
kTe.registWord('학생', 'student')
kTe.registWord('선생님', 'teacher')

kTe.printWords()

kTe.updateWord('책', 'book')

kTe.printWords()

print(f'책: {kTe.searchWord("책")}')
print(f'나비: {kTe.searchWord("나비")}')
print(f'선생님: {kTe.searchWord("선생님")}')

kTe.removeWord("책")

kTe.printWords()

[KorToEng] registWord() : 책 to bok
[KorToEng] registWord() : 나비 to butterfly
[KorToEng] registWord() : 연필 to pencil
[KorToEng] registWord() : 학생 to student
[KorToEng] registWord() : 선생님 to teacher
책: bok
나비: butterfly
연필: pencil
학생: student
선생님: teacher
[KorToEng] updateWord() : 책 to book
책: book
나비: butterfly
연필: pencil
학생: student
선생님: teacher
[KorToEng] searchWord() : 책
책: book
[KorToEng] searchWord() : 나비
나비: butterfly
[KorToEng] searchWord() : 선생님
선생님: teacher
[KorToEng] removeWord() : 책
나비: butterfly
연필: pencil
학생: student
선생님: teacher

05_057 연습문제 클래스 5

주사위 게임 클래스 만들고 컴퓨터와 사용자의 게임 결과를 출력하자 - 더 많은 숫자가 나오면 이기는 게임 / 동일하면 무승부 / 컴퓨터의 넘버를 세팅해주는 함수, 유저의 넘버 세팅, 게임 시작, 결과 출력하는 함수

모듈 파일 - dice.py

import random as rd

class Dice:
def init(self):
self.cNum = 0
self.uNum = 0

def setCnum(self):
print('[Dice] setCnum()')
self.cNum = rd.randint(1, 6)

# 여기서 사용자의 Cnum을 활용할 수 있게 한다?

def setUnum(self):
print('[Dice] setUnum()')
self.uNum = rd.randint(1, 6)

def startGame(self):
print('[Dice] startGame()')

self.setCnum()
self.setUnum()

def printResult(self):
print('[Dice] printResult()')

if self.cNum == 0 or self.uNum == 0:
  print('주사위 숫자 설정 전 입니다.')
  
else:
  if self.cNum > self.uNum:
    print(f'컴퓨터 vs 유저 : {self.cNum} vs {self.uNum} => 컴퓨터 승!!!')
  elif self.cNum < self.uNum:
    print(f'컴퓨터 vs 유저 : {self.cNum} vs {self.uNum} => 유저 승!!!')
  elif self.cNum == self.uNum:
    print(f'컴퓨터 vs 유저 : {self.cNum} vs {self.uNum} => 무승부!!!')  
    

실행 파일 - ex

import dice #

dc = dice.Dice() # 이 클래스를 생성하면 이 안에 스타트게임 함수 호출, 스타트게임을 호출하면 이 안에서 셋씨넘버, 셋유넘버를 다 호출해서 게임이 시작된다. 그리고 프린트 리졸트까지 출력하면 결과까지 다 볼 수 있다.

dc.startGame() # 이걸 실행시키면 난수가 발생해서 컴퓨터와 내가 주사위를 굴린 셈이 된다

dc.printResult() # 출력

[Dice] startGame()
[Dice] setCnum()
[Dice] setUnum()
[Dice] printResult()
컴퓨터 vs 유저 : 3 vs 3 => 무승부!!!

클래스 개념이 잘 안와닿아서 파이썬: 코딩 도장 책 공부

파이썬 코딩 도장 unit34 - 클래스 사용하기 내용 중 일부 포함

class Person:
def greeting(self):
print('Hello')

james = Person() # james 가 인스턴스가 된다. 메서드는 클래스가 아니라, 인스턴스를 통해 호출한다. / 메서드는 클래스 안에 있는 함수를 의미한다.

james.greeting()

클래스 안에서 self 없이 함수 이름만 사용하면 클래스 밖의 함수를 호출하는 것으로 알아 듣는다.

class Person:
def init(self):
self.hello = '안녕하세요'

def greeting(self):
print(self.hello)

james = Person()

james.greeting()

class Person:
def init(self, name, age, address):
self.hello = '안녕하세요.'
self.name = name
self.age = age
self.address = address

def greeting(self):
print('{0} 저는 {1}입니다.' .format(self.hello, self.name))

maria = Person('마리아', '25', '서울시 서초구 반포동')
maria.greeting()

print(f'이름: {maria.name}')
print(f'나이: {maria.age}')
print(f'주소: {maria.address}')

profile
데이터 분석가

0개의 댓글