클래스 연습문제1
회원리스트
class Member:
def __init__(self,i,p):
self.id=i
self.pw=p
class MemberRepository:
def __init__(self):
self.members={}
def addMember(self,m):
self.members[m.id] = m.pw
def loginMember(self,i,p):
isMember = i in self.members
if isMember and self.members[i] == p:
print(f'{i}: log-in success')
else:
print(f'{i}: log-in fail')
def removeMember(self,i,p):
del self.members[i]
def printMembers(self):
for mk in self.members.keys():
print(f'ID : {mk}')
print(f'PW : {self.members[mk]}')
실행
import member as mb
mems = mb.MemberRepository()
for i in range(3):
mId = input('아이디 입력 : ')
mPw = input('비밀번호 입력 : ')
mem = mb.Member(mId, mPw)
mems.addMember(mem)
mems.printMembers()
mems.loginMember('abcd','6878')
mems.loginMember('efgh','3957')
mems.loginMember('ijkl','2452')
mems.removeMember('abcd','6878')
mems.printMembers()
클래스 연습문제2
노멀티비의 속성과 기능을 4K,8K티비가 상속
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}')
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) #4kTV의 새로운 정보를 다시 위로 올려줘야해서 super 사용
def setSmartTv(self,s):
self.smartTv = s
class Tv8k(NormalTv): #노멀티비 상속
def __init__(self,i,c,r='8k'):
super().__init__(i,c,r) #4kTV의 새로운 정보를 다시 위로 올려줘야해서 super 사용
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()
print('\n')
friend8kTv = st.Tv8k('55','black','8k')
friend8kTv.setSmartTv('on')
friend8kTv.setAiTv('on')
friend8kTv.turnOn()
friend8kTv.printTvInfo()
friend8kTv.turnOff()
클래스 연습문제3
도서관리 프로그램
class book:
def __init__(self, name, price, isbn):
self.bName =name
self.bPrice = price
self.bIsbn = isbn
class BookRepository:
def __init__(self):
self.bDic = {} #딕셔너리 이용
def registBook(self,b):
self.bDic[b.bIsbn] = b #[] 안에 있는게 키값, isbn을 키값으로 딕셔너리에 추가한다.
def removeBook(self,isbn):
del self.bDic[isbn]
def printBooksInfo(self): #모든 책정보 출력
for isbn in self.bDic.keys():
b=self.bDic[isbn]
print(f'{b.bName}, {b.bPrice}, {b.bIsbn}')
def printBookInfo(self, isbn):
if isbn in self.bDic:
b=self.bDic[isbn]
print(f'{b.bName}, {b.bPrice}, {b.bIsbn}')
else:
print('lookup result does not exist')
실행
import book as bk
myBRepository = bk.BookRepository()
myBRepository.registBook(bk.book('python',20000, '1234567890'))
myBRepository.registBook(bk.book('java',25000, '0987654321'))
myBRepository.registBook(bk.book('c/c++',27000, '123459876'))
myBRepository.printBooksInfo()
myBRepository.printBookInfo('1234567890')
myBRepository.removeBook('1234567890')
myBRepository.printBooksInfo()
myBRepository.printBookInfo('1234567890')
클래스 연습문제4
추상클래스 이용, 사전클래스 만들기
from abc import ABCMeta #추상클래스 불러내기
from abc import abstractmethod
class AbsDictionary(metaclass=ABCMeta):
def __init__(self):
self.wordDic = {}
@abstractmethod #추상메서드 표기
def registWord(self,w1,w2): #w1는 단어, w2는 번역한 단어
pass #추상메서드는 구현하면 안되니까 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]
def printWords(self):
for k in self.wordDic.keys():
print(f'{k}: {self.wordDic[k]}')
실행
import dictionary as dic
kTe = dic.KorToEng()
kTe.registWord('책','booook')
kTe.registWord('나비','butterfly')
kTe.registWord('연필','pencil')
kTe.registWord('학생','student')
kTe.registWord('선생님','teacher')
print('\n')
kTe.printWords()
print('\n')
kTe.updateWord('책','book')
print('\n')
kTe.printWords()
print('\n')
print(f'책 : {kTe.searchWord("책")}')
print('\n')
kTe.removeWord('책')
print('\n')
kTe.printWords()
클래스 연습문제5
주사위 게임 클래스
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)
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} >> 무승부'
실행
import dicegame as dg
dc = dg.Dice()
dc.startGame()
dc.printResult()
클래스 연습문제6
자동차 경주게임 클래스
**자동차 설정**
import random
class Car:
def __init__(self, n= 'fire car', c='red', s= 200): #자동차 속성 부여
self.name = n
self.color = c
self.max_speed = s
self.distance = 0
def printCarInfo(self):
print(f'name : {self.name}, color : {self.color}, max_speed : {self.max_speed}')
def controlSpeed(self):
return random.randint(0,self.max_speed)
#항상 최고속도로 달리지 않으니까 랜덤하게 속도 변화
def getDistanceForHour(self):
return self.controlSpeed() * 1
**레이스 설정 **
from time import sleep #잠시 프로그램을 쉬게 할 수 있음
class CarRacing:
def __init__(self):
self.cars = [] #자동차 리스트
self.rankings = []
def startRacing(self):
for i in range(10): #바퀴 수
print(f'Racing : {i+1}바퀴') #i는 0부터니까 +1
for car in self.cars:
car.distance += car.getDistanceForHour() #1바퀴 돌때마다 거리 증가
sleep(1) #1초 동안 쉰다.
self.printCurrentCarDistance() #현재이동한 거리 나타냄
def printCurrentCarDistance(self):
for car in self.cars:
print(f'{car.name}: {car.distance}\t\t', end='')
print()
def addCar(self,c): #자동차리스트에 차 등록
self.cars.append(c)
**실행**
import racing as rc
import carrace
myCarGame = rc.CarRacing() #차 정보 입력
car01 = carrace.Car('Car01','White', 250)
car02 = carrace.Car('Car02','Black', 260)
car03 = carrace.Car('Car03','Yello', 240)
car04 = carrace.Car('Car04','Red', 2800)
car05 = carrace.Car('Car05','Blue', 270)
myCarGame.addCar(car01) #자동차 리스트에 등록
myCarGame.addCar(car02)
myCarGame.addCar(car03)
myCarGame.addCar(car04)
myCarGame.addCar(car05)
myCarGame.startRacing()
클래스 연습문제7
mp3 플레이어 클래스
import random
from time import sleep
class Song:
def __init__(self,t,s,pt):
self.title = t
self.singer = s
self.play_time = pt
def printSongInfo(self):
print(f'Title : {self.title}, Singer : {self.singer}, Play time : {self.play_time}')
class Player:
def __init__(self):
self.songList = []
self.isLoop = False #반복재생 할건지
def addSong(self, s):
self.songList.append(s)
def play(self):
if self.isLoop: #반복재생이 트루라면
while self.isLoop: #반복재생이 트루인 동안 for문이 계속 돈다.
for s in self.songList:
print(f'Title : {s.title}, Singer : {s.singer}, Play time : {s.play_time}sec')
sleep(s.play_time)
else:
for s in self.songList:
print(f'Title : {s.title}, Singer : {s.singer}, Play time : {s.play_time}sec')
sleep(s.play_time)
def shuffle(self):
random.shuffle(self.songList) #이렇게 자료구조 넣어주면 알아서 셔플됨
def setIsLoop(self, flag):
self.isLoop = flag
** 실행**
import song as mp3
s1 = mp3.Song('신호등', '이무진', 3)
s2 = mp3.Song('Butter', '방탄소년단', 3)
s3 = mp3.Song('IAM', 'IVE', 3)
s4 = mp3.Song('Fearless', '르세라핌', 3)
s5 = mp3.Song('MARIGOLD', '아이묭', 3)
player = mp3.Player()
player.addSong(s1)
player.addSong(s2)
player.addSong(s3)
player.addSong(s4)
player.addSong(s5)
player.setIsLoop(False)
player.shuffle(False)
player.play()