OT 때 들었던 얘기가 문득 생각이 나서 다시 찾아보았다.
파이썬 중급 연습문제부터 시련이 찾아 올 것이라는 내용인데,
극복(?) 방법은 이렇다
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 #밸류: id, 키값: 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('qqq', '789')
mems.removeMember('qqq', '789')
mems.printMembers()
😅 클래스 상속 - 일단 혼자 짜본 코드
class NormalTv:
def __init__(self, i, c, r, s, a):
self.inch = i
self.color = c
self.resolution = r
self.smartTv = s
self.aiTv = a
def turnOn(self):
print('켜짐')
def turnOff(self):
print('꺼짐')
def printTvInfo(self):
print(self.inch, self.color, self.resolution, self.smartTv, self.aiTv)
class Tv4K(NormalTv):
def setSmartTv(self):
print('스마트 TV ON')
class Tv8K(NormalTv):
def setSmartTv(self):
print('스마트 TV ON')
def setAiTv(self):
print('AI TV ON')
👀 영상 본 다음 다시 복기
#TV.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 ON')
def turnOff(self):
print('TV 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'AI TV: {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 TV as t
my4KTv = t.Tv4K('60', 'silver', '4k')
my4KTv.turnOn()
my4KTv.setSmartTv('on')
my4KTv.printTvInfo()
my4KTv.turnOff()
friend8KTv = t.Tv8K('80', 'gold', '8k')
friend8KTv.turnOn()
friend8KTv.setSmartTv('on')
friend8KTv.setAiTv('on')
friend8KTv.printTvInfo()
friend8KTv.turnOff()
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
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 BookMod as bm
myLib = bm.BookRepository()
myLib.registBook(bm.Book('python', 20000, '1234567890'))
myLib.registBook(bm.Book('Java', 21000, '4561378935'))
myLib.registBook(bm.Book('C++', 25000, '1245798335'))
myLib.printBooksInfo()
print()
myLib.printBookInfo('1234567890')
myLib.removeBook('1234567890')
print()
myLib.printBooksInfo()
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]
def printWords(self):
for k in self.wordDic.keys():
print(f'{k} : {self.wordDic[k]}')
class KorToJap(AbsDictionary):
def __init__(self):
super().__init__()
def registWord(self, w1, w2):
print(f'[KorToJap] registWord() : {w1} to {w2}')
self.wordDic[w1] = w2
def removeWord(self, w1):
print(f'[KorToJap] removeWord() : {w1}')
del self.wordDic[w1]
def updateWord(self, w1, w2):
print(f'[KorToJap] updateWord() : {w1} to {w2}')
self.wordDic[w1] = w2
def searchWord(self, w1):
print(f'[KorToJap] searchWord() : {w1}')
return self.wordDic[w1]
def printWords(self):
for k in self.wordDic.keys():
print(f'{k} : {self.wordDic[k]}')
import ADictionary as dic
myDic = dic.KorToEng()
myDic.registWord('책','bok')
myDic.registWord('고양이','cat')
myDic.registWord('강아지','dog')
myDic.registWord('테니스','tennis')
myDic.registWord('시계','watch')
myDic.printWords()
myDic.updateWord('책','book')
myDic.removeWord('시계')
myDic.printWords()
print(f'테니스 : {myDic.searchWord("테니스")}')
super().__init__() 쓰는거 잊지말기#dice.py
import random as rd
class Dice:
def __init__(self):
self.cNum = 0
self.uNum = 0
def setCnum(self):
print(f'[Dice] setCnum()')
self.cNum = rd.randint(1,6)
return self.cNum
def setUnum(self):
print(f'[Dice] setUnum()')
self.uNum = rd.randint(1, 6)
return self.uNum
def startGame(self):
print(f'[Dice] startGame()')
self.setCnum()
self.setUnum() #혼자 풀 때 이걸 빼먹어서 action.py에서 setter를 따로 불러왔음
def printResult(self):
print(f'[Dice] printResult()')
if self.cNum == 0 or self.uNum == 0:
print('게임을 시작해주세요')
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} >> 유저 승!!')
elif self.cNum == self.uNum:
print(f'컴퓨터 vs 유저 : {self.cNum} vs {self.uNum} >> 무승부!!')
#action.py
import dice as d
myGame = d.Dice()
myGame.startGame()
myGame.printResult()
😀 번외 (괜히 자신감 생겨서 사용자 입력 받은 주사위 숫자랑 랜덤 주사위랑 비교하기)
import random as rd
class Dice:
def __init__(self):
self.cNum = 0
self.uNum = 0
def setCnum(self):
print(f'[Dice] setCnum()')
self.cNum = rd.randint(1,6)
return self.cNum
def setUnum(self, num1):
print(f'[Dice] setUnum()')
self.uNum = num1
return self.uNum
def startGame(self):
print(f'[Dice] startGame()')
self.setCnum()
def printResult(self):
print(f'[Dice] printResult()')
if self.cNum == 0 or self.uNum == 0:
print('게임을 시작해주세요')
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} >> 유저 승!!')
elif self.cNum == self.uNum:
print(f'컴퓨터 vs 유저 : {self.cNum} vs {self.uNum} >> 무승부!!')
import dice as d
myGame = d.Dice()
userNum = int(input('숫자 입력: '))
myGame.setUnum(userNum)
myGame.startGame()
myGame.printResult()
#car.py
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
#racing.py
from time import sleep
class CarRacing:
def __init__(self):
self.cars = []
def startRacing(self):
for i in range(10):
print(f'{i+1}바퀴')
for car in self.cars:
car.distance += car.getDistanceForHour()
sleep(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)
#ex.py
from car_game import racing as rc
from car_game import car
myCarGame = rc.CarRacing()
car01 = car.Car('Car01', 'Black', 250)
car02 = car.Car('Car02', 'White', 300)
car03 = car.Car('Car03', 'Red', 220)
car04 = car.Car('Car04', 'Blue', 270)
car05 = car.Car('Car05', 'Yellow', 200)
myCarGame.addCar(car01)
myCarGame.addCar(car02)
myCarGame.addCar(car03)
myCarGame.addCar(car04)
myCarGame.addCar(car05)
myCarGame.startRacing()
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 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 mp3
s1 = mp3.Song('NOW', '핑클', 3)
s2 = mp3.Song('10 minute', '이효리', 4)
s3 = mp3.Song('난', '옥주현', 3)
s4 = mp3.Song('다시 여기 바닷가', '싹쓰리', 5)
s5 = mp3.Song("Don't Touch Me", '환불원정대', 2)
myPlayer = mp3.Player()
myPlayer.addSong(s1)
myPlayer.addSong(s2)
myPlayer.addSong(s3)
myPlayer.addSong(s4)
myPlayer.addSong(s5)
myPlayer.setIsLoop(False)
myPlayer.shuffle()
myPlayer.play()
오늘은 정말.. 이거맞아? 라는 마음의 소리가 27번 정도 들림