💻 keep going
아무 생각 말고 그냥 하자!
class Member:
def __init__(self, i, p):
self.id = i
self.pw = p
class MemberRepository: # 모여서 관리를 하는 class
def __init__(self): # __init__ -> 생성자, 속성 / 아래부터는 다 기능
self.members = {} # {}(딕셔너리)에는 키값 과 벨류값이 들어간다.
# 회원의 id가 키값이 되고, 사용자의 전체 정보가 벨류값이 된다.
def addMember(self, m): # m 은 class Member에서 만들어진 회원객체
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] # del : 내장키워드 - 변수나 객체를 삭제
def printMembers(self): # 전체 멤버를 출력
for mk in self.members.keys(): # .key() : 딕셔너리에서 모든 key값 출력
print(f"ID : {mk}") # mk는 회원의 ID를 나타내는 문자열
print(f"PW : {self.members[mk]}") # 파이썬 중급 문제풀이 메모장 01
import 클래스01 as mb
mems = mb.MemberRepository()
for i in range(1): # 1명의 정보 입력 받기
mId = input("아이디 입력 : ")
mPw = input("비밀번호 입력 : ")
mem = mb.Member(mId, mPw)
mems.addMember(mem)
mems. loginMember("abcd", "1234")
mems. removeMember("abcd", "1234")
mems.printMembers()
아이디 입력 : abcd
비밀번호 입력 : 1234
abcd : log-in success!!
class NormalTv:
def __init__(self, i=32, c="black", r="full-HD"): # 속성
self.inch = i
self.color = c
self.resolution = r
self.smartTv = "off" # 일반 tv이기 때문에 smart,ai 기능 없음
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): # 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 클래스02 as st
my4kTv = st.Tv4k("65", "silver", "4k")
my4kTv.setSmartTv("on")
my4kTv.printTvInfo()
my4kTv.turnOn()
my4kTv.turnOff()
print()
friend4kTv = st.Tv4k("55", "white", "4k")
friend4kTv.setSmartTv("off")
friend4kTv.printTvInfo()
friend4kTv.turnOn()
friend4kTv.turnOff()
print()
my8kTv = st.Tv8k("75", "black", "8k")
my8kTv.setSmartTv("on")
my8kTv.setAiTv("on")
my8kTv.printTvInfo()
my8kTv.turnOn()
my8kTv.turnOff()
inch : 65
color : silver
resolution : 4k
smartTv : on
aiTv : off
TV power on!!
TV power off!!
inch : 55
color : white
resolution : 4k
smartTv : off
aiTv : off
TV power on!!
TV power off!!
inch : 75
color : black
resolution : 8k
smartTv : on
aiTv : on
TV power on!!
TV power off!!
# 클래스가 같은 파일 안에 있으면, 하나의 모듈 안에 있는 클래스들은 서로 import 없이도 사용가능.
# 따라서 Book 클래스와 BookRepository 클래스는 모두 같은 모듈 안에 있기 때문에 BookRepository 클래스에서 Book 클래스의 객체를 사용할 수 있다.
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): # 책 한권이 들어오면 bDic에 저장
self.bDic[b.bIsbn] = b # 키값 : isbn
# [b.isbn] 뜻 : Book 객체 "b"의 "isbn" 속성 값을 BookRepository 클래스 내에서 저장하는 것
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 클래스03 as bk
myBRepository = bk.BookRepository()
myBRepository.registBook(bk.Book("python" , 20000, "1234567890"))
myBRepository.registBook(bk.Book("java" , 25000, "4536323423"))
myBRepository.registBook(bk.Book("c/c++" , 27000, "98739857"))
myBRepository.removeBook("4536323423")
myBRepository.printBooksinfo()
python,20000, 1234567890
c/c++,27000, 98739857
from abc import ABCMeta
from abc import abstractmethod
class AbsDictionar(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(AbsDictionar): # 상속을 받았기 때문에 @abstractmethod 반드시 구현해야함
def __init__(self):
super().__init__()
def registWord(self, w1, w2):
print(f"[KorToEng] registWord() : {w1} to {w2}")
self.wordDic[w1] = [w2] # 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(AbsDictionar):
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 클래스04 as dic
kTe = dic.KorToEng()
kTe.registWord("책", "bok")
kTe.registWord("나비", "butterfly")
kTe.registWord("연필", "pencil")
kTe.registWord("학생", "student")
kTe.registWord("선생님", "teacher")
print()
kTe.printWords()
print()
kTe.updateWord("책", "book")
kTe.printWords()
print()
print(f"책 : {kTe.searchWord('책')}")
kTe.removeWord("책")
kTe.printWords()
print()
print()
kTj = dic.KorToJap()
kTj.registWord("밥", "つゆ")
kTj.registWord("국물", "つゆ")
kTj.printWords()
print()
kTj.updateWord("밥", "ご飯")
kTj.printWords()
print(f" 밥 : {kTj.searchWord('밥')}")
print()
kTj.printWords()
print()
kTj.removeWord("국물")
kTj.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] removeWord() : 책
나비 : ['butterfly']
연필 : ['pencil']
학생 : ['student']
선생님 : ['teacher']
[KorToJap] registWord() : 밥 to つゆ
[KorToJap] registWord() : 국물 to つゆ
밥 : ['つゆ']
국물 : ['つゆ']
[KorToJap] updateWord() : 밥 to ご飯
밥 : ['ご飯']
국물 : ['つゆ']
[KorToJap] searchWord() : 밥
밥 : ['ご飯']
밥 : ['ご飯']
국물 : ['つゆ']
[KorToJap] removeWord() : 국물
밥 : ['ご飯']
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)
print(f"결과 : {self.cNum}")
def setUnum(self):
print("[Dice] setUnum()")
self.uNum = rd.randint(1, 6)
print(f"결과 : {self.uNum}")
def starGame(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 클래스05 as dice
dc = dice.Dice()
dc.starGame()
dc.printResult()
[Dice] startGame()
[Dice] setCnum()
결과 : 6
[Dice] setUnum()
결과 : 1
[Dice] printResult()
컴퓨터vs유저 : 6 vs 1 >> 컴퓨터 승
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): # 10바퀴
print(f"Racing : {i+1}바퀴")
for car in self.cars:
car.distance += car.getDistanceForHour()
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)
(자동차는 랜덤하게 이동하며, 편의상 10초 동안 주행한다고 할 때 가장 멀리 이동한 자동차가 우승)
from car_game import car
from car_game import racing as rc
myCarGame = rc.CarRacing()
car01 = car.Car("Car01", "White", 250)
car02 = car.Car("Car02", "Black", 200)
car03 = car.Car("Car03", "Yellow", 220)
car04 = car.Car("Car04", "Red", 280)
car05 = car.Car("Car05", "Blue", 150)
myCarGame.addCar(car01)
myCarGame.addCar(car02)
myCarGame.addCar(car03)
myCarGame.addCar(car04)
myCarGame.addCar(car05)
myCarGame.startRacing()
Racing : 1바퀴
Car01: 30 Car02: 38 Car03: 113 Car04: 26 Car05: 6
Racing : 2바퀴
Car01: 202 Car02: 119 Car03: 180 Car04: 49 Car05: 126
Racing : 3바퀴
Car01: 415 Car02: 120 Car03: 383 Car04: 273 Car05: 217
Racing : 4바퀴
Car01: 458 Car02: 200 Car03: 472 Car04: 521 Car05: 312
Racing : 5바퀴
Car01: 628 Car02: 256 Car03: 480 Car04: 523 Car05: 415
Racing : 6바퀴
Car01: 687 Car02: 442 Car03: 502 Car04: 755 Car05: 479
Racing : 7바퀴
Car01: 895 Car02: 455 Car03: 502 Car04: 863 Car05: 596
Racing : 8바퀴
Car01: 994 Car02: 540 Car03: 537 Car04: 884 Car05: 670
Racing : 9바퀴
Car01: 1083 Car02: 620 Car03: 541 Car04: 1066 Car05: 742
Racing : 10바퀴
Car01: 1181 Car02: 801 Car03: 610 Car04: 1314 Car05: 771
from time import sleep # sleep 기능을 사용하기 위해
import random # shuffle 기능을 사용하기 위해
class Song:
def __init__(self, t, s, pt):
self.title = t
self.singer = s
self.playTime = pt
def printSongInfo(self):
print(f"Title : {self.title}, Singer : {self.singer}, PlayTime : {self.playTime}")
class Player:
def __init__(self):
self.songList = []
self.isLoop = False
def addSong(self, s):
self.songList.append(s)
def play(self): # 여기 중요
if self.isLoop: # 반복재생이 True 라면
while self.isLoop: # 반복재생이 True인 동안
for s in self.songList: # for문이 계속 돈다 ex) 10곡이라면 끝나고 또다시 10곡 while문이 무한루프에 빠졌기 때문에
print(f"Title : {s.title}, Singer : {s.singer}, PlayTime : {s.playTime}sec")
sleep(s.playTime) # 재생하고있는 곡의 playTime까지 기능 정지
else : # 반복재생이 Flase 라면 10곡 후 프로그램 종료
for s in self.songList:
print(f"Title : {s.title}, Singer : {s.singer}, PlayTime : {s.playTime}sec")
sleep(s.playTime)
def shuffle(self):
random.shuffle(self.songList)
def setIsLoop(self, flag): # 반복재생을 True or Flase 로 결정
self.isLoop = flag
import mp3player as mp3
s1 = mp3.Song("신호등", "이무진", 3)
s2 = mp3.Song("random1", "조지", 6)
s3 = mp3.Song("random2", "조지1", 2)
s4 = mp3.Song("random3", "조지2", 7)
s5 = mp3.Song("random4", "조지3", 5)
player = mp3.Player()
# 노래 추가
player.addSong(s1)
player.addSong(s2)
player.addSong(s3)
player.addSong(s4)
player.addSong(s5)
# 반복 재생 안 함
player.setIsLoop(False)
# 노래 섞음
player.shuffle()
player.play()
Title : random3, Singer : 조지2, PlayTime : 7sec
Title : 신호등, Singer : 이무진, PlayTime : 3sec
Title : random1, Singer : 조지, PlayTime : 6sec
Title : random4, Singer : 조지3, PlayTime : 5sec
Title : random2, Singer : 조지1, PlayTime : 2sec