☕ 오늘의 주저리주저리
'잘하고 있는가' 에 대한 성찰은 주기적으로 불안감을 가져온다.
하지만 어쩌겠는가 그럼에도 불구하고 할건 해야지 🫥
#module 디렉토리의 membesr 모듈
class Member: #회원가입클래스
def __init__(self, i, p):
self.id = i
self.pw = p
class Members_Repository: #회원정보관리클래스
def __init__(self):
self.members = {}
def add_member(self,m): #회원정보추가
self.members[m.id] = m.pw
def login(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 remove_member(self,i,p): #회원정보삭제기능
del self.members[i]
def print_members(self): #회원리스트 출력기능
for i in self.members.keys():
print(f'ID : {i}')
print(f'PW : {self.members[i]}')
#실행파일
from module import members as m
mems = m.Members_Repository()
for i in range(3) :
id = input('아이디입력 : ')
pw = input('비밀번호입력 : ')
mem = m.Member(id,pw)
mems.add_member(mem)
mems.print_members()
login_id = input('로그인 할 아이디 입력 : ')
login_pw = input('로그인 할 비밀번호 입력 : ')
mems.login(login_id,login_pw)
delete_id = input('삭제할 아이디 입력 : ')
delete_pw = input('삭제할 비밀번호 입력 : ')
mems.remove_member('qwe',123)
mems.print_members()
아직 이해가 가지 않는 부분이
Members_Repository 클래스의
add_member 메서드 속성에 Member클래스를 넣는다는것인데..
Member클래스의 self를 가져와서
self.members[m.id] = m.pw가
self.members[self.id] = self.pw가 되는 것일까 ㅜㅜ..
일단은 실행되는 것만으로도 만족했던 문제였다.
#module폴더의 start_tv 모듈
class NormalTv :
def __init__(self,i=30,c='블랙',r='full-HD'):
self.inch = i
self.color = c
self.resolution = r
self.smartTv = 'off'
self.aiTv = 'off'
def turn_on(self):
print('티비켜')
def turn_off(self):
print('티비꺼')
def print_tv_info(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)
def set_smart_tv(self,s):
self.smartTv = s
class Tv8k(NormalTv) :
def __init__(self,i,c,r='8K'):
super().__init__(i,c,r)
def set_smart_tv(self, s):
self.smartTv = s
def set_ai_tv(self,a):
self.aiTv = a
#실행파일
from module import smart_tv as st
my4ktv = st.Tv4K(65,'silver','4K')
my4ktv.set_smart_tv('on')
my4ktv.turn_on()
#티비켜
my4ktv.turn_off()
#티비꺼
my4ktv.print_tv_info()
#inch : 65
#color : silver
#resolution : 4K
#smartTv : on
#aiTv : off
my8ktv = st.Tv8k(70,'white','8K')
my8ktv.set_smart_tv('on')
my8ktv.set_ai_tv('on')
my8ktv.turn_on()
#티비켜
my8ktv.turn_off()
#티비꺼
my8ktv.print_tv_info()
#inch : 70
#color : white
#resolution : 8K
#smartTv : on
#aiTv : on
우선 normalTv의 속성 중 smartTv와 aiTv는
상속받는 클래스의 기능으로 들어가 있으므로
속성값에서 제외하고 off처리 해둔 뒤,
상속받는 클래스의 기능으로 on 처리 해주는 방식이다.
상위클래서에서 상속받아서 사용하는 info 메서드 실행 시 해당 기능이 켜져있는지 꺼져있는지 확인 할 수 있다.
문제만 보고 풀기는 다소 어려웠지만,
풀이를 보고 코드를 짜보니 이해는 되었다 !
#module파일 dictionary 모듈
from abc import ABCMeta
from abc import abstractmethod
class Dictoionary(metaclass=ABCMeta):
def __init__(self):
self.word_dic = {}
@abstractmethod
def regist_word(self,w1,w2): #등록
pass
@abstractmethod
def remove_word(self, w1): #제거
pass
@abstractmethod
def update_word(self, w1, w2): #수정
pass
@abstractmethod
def search_word(self, w1): #번역검색
pass
class KorToEng(Dictoionary) :
def __init__(self):
super().__init__()
def regist_word(self,w1,w2):
print(f'번역단어 등록 {w1} -> {w2}')
self.word_dic[w1] = w2
def remove_word(self, w1): #제거
print(f'번역단어 삭제 {w1}')
del self.word_dic[w1]
def update_word(self, w1, w2): #수정
print(f'번역단어 수정 {w1} -> {w2}')
self.word_dic[w1] = w2
def search_word(self, w1): #번역검색
return self.word_dic[w1]
def print_list(self): #전체등록단어리스트
for i in self.word_dic :
print(f'{i} : {self.word_dic[i]}')
#실행파일
from module import dictionary as dt
krdt = dt.KorToEng()
#번역단어등록
krdt.regist_word('안녕','Hello')
krdt.regist_word('잘가','Bye')
krdt.regist_word('파이썬','python')
krdt.regist_word('공부','study')
krdt.regist_word('운동','exercise')
'''
번역단어 등록 안녕 -> Hello
번역단어 등록 잘가 -> Bye
번역단어 등록 파이썬 -> python
번역단어 등록 공부 -> study
번역단어 등록 운동 -> exercise
'''
#등록된 리스트
krdt.print_list()
'''
안녕 : Hello
잘가 : Bye
파이썬 : python
공부 : study
운동 : exercise
'''
#공부단어 삭제
krdt.remove_word('공부')
'''번역단어 삭제 공부'''
#등록된 리스트
krdt.print_list()
'''
안녕 : Hello
잘가 : Bye
파이썬 : python
운동 : exercise
'''
#등록단어수정
krdt.update_word('파이썬','Python')
'''번역단어 수정 파이썬 -> Python'''
#등록된 리스트
krdt.print_list()
'''
안녕 : Hello
잘가 : Bye
파이썬 : Python
운동 : exercise
'''
#검색
print(krdt.search_word('잘가'))
'''Bye'''
상위클래스에서
from abc import ABCMeata
from abc import abstractmethod
모듈을 사용하여
추상클래스(=하위클래스에서 기능구현)을 하고
하위클래스에서 상속받은 후 해당 기능을 실현시킨다.
#module 폴더의 book 모듈
class Book :
def __init__(self,n,p,i):
self.name = n
self.price = p
self.isbn = i
class BookRepository :
def __init__(self):
self.bDic = {}
def regist_book(self,m): #상위클래스의 self값 받을메서드
self.bDic[m.isbn] = m
def remove_book(self,isbn):
del self.bDic[isbn]
def print_books_info(self):
for isbn in self.bDic :
b = self.bDic[isbn]
print(f'{isbn} : {b.name},{b.price}')
def print_book_info(self,isbn):
if isbn in self.bDic :
b = self.bDic[isbn]
print(f'{isbn} : {b.name},{b.price}')
else :
print('없는 isbn입니다.')
#실행파일
from module import book as b
br = b.BookRepository()
#책 정보등록
br.regist_book(b.Book('python study',10000,'1'))
br.regist_book(b.Book('algorithm study',20000,'2'))
br.regist_book(b.Book('math study',15000,'3'))
#책 전체정보출력
br.print_books_info()
#1 : python study,10000
#2 : algorithm study,20000
#3 : math study,15000
br.print_book_info('1') #1 isbn 정보출력
#1 : python study,10000
br.remove_book('2') #2 isbn 정보삭제
br.print_books_info()
#1 : python study,10000
#3 : math study,15000
br.print_book_info('2')
#없는 isbn입니다.
import random
class Dice :
def __init__(self):
self.cnum = 0
self.unum = 0
def set_cnum(self):
print(f'[Dice] set_cnum()')
self.cnum = random.randint(1,6)
def set_unum(self):
print(f'[Dice] set_unum()')
while True :
i = int(input('주사위 입력(1~6) : '))
if i > 6 or i < 0 :
print('1~6사이로 입력해주세요')
continue
else :
self.unum = i
break
def start_game(self):
print(f'[Dice] start_game()')
self.set_cnum()
self.set_unum()
self.print_result()
def print_result(self):
print(f'[Dice] print_result()')
if self.cnum > self.unum :
result = '컴퓨터 승'
elif self.cnum < self.unum :
result = '유저 승'
elif self.cnum == self.unum :
result = '무승부'
print(f'컴퓨터 vs 유저 : {self.cnum} vs {self.unum} >> {result}')
#실행파일
from module import dice as d
dc = d.Dice()
dc.start_game()
#실행결과
[Dice] start_game()
[Dice] set_cnum()
[Dice] set_unum()
주사위 입력(1~6) : 7
1~6사이로 입력해주세요
주사위 입력(1~6) : 5
[Dice] print_result()
컴퓨터 vs 유저 : 3 vs 5 >> 유저 승
풀리기시작했다.
너무 재밌다 !!!!!!!!!!!
처음에는 init메서드에 뭘 넣어야할지 몰라서
pass로 적어놓고 하단 메서드들을
함수만들듯이 만들었는데,
풀이과정처럼 self를 넣어두니 한결 코드가 간단해졌다.
import random
class Car :
def __init__(self, n ='fire car', c = 'red', s = 200):
self.name = n
self.color = c
self.speed = s
self.distance = 0
def print_car_info(self):
print(f'name : {self.name}, color : {self.color}, max_speed : {self.speed}')
def control_speed(self):
return random.randint(0,self.speed)
def get_distance_for_hour(self):
#거리 = 속도 * 시간
return self.control_speed() * 1
from time import sleep
class Race :
def __init__(self):
self.cars = []
self.rankings = []
def start_racing(self):
for i in range(10) : #10바퀴
print(f'Racing {i+1}바퀴')
for car in self.cars :
car.distance += car.get_distance_for_hour()
sleep(1)
self.print_current_car_distance()
def print_current_car_distance(self) :
for car in self.cars :
print(f'{car.name} : {car.distance}\t\t', end='')
print()
def add_car(self,c):
self.cars.append(c)
#실행파일
from module.car import Car
from module.car import Race
car1 = Car('Car01','white',250)
car2 = Car('Car02','red',200)
car3 = Car('Car03','black',280)
car4 = Car('Car04','yello',230)
car5 = Car('Car05','blue',180)
mygame = Race()
mygame.add_car(car1)
mygame.add_car(car2)
mygame.add_car(car3)
mygame.add_car(car4)
mygame.add_car(car5)
mygame.start_racing()
class Player :
def __init__(self,t,s,pt):
self.title = t
self.singer = s
self.play_time = pt
def print_song_info(self):
print(f'Title : {self.title},'
f'Singer : {self.singer},'
f'Play Time : {self.play_time}')
from time import sleep
import random
class Song :
def __init__(self):
self.song_list = []
self.isloop = False
def add_song(self,s):
self.song_list.append(s)
def play(self):
if self.isloop :
while self.isloop :
for song in self.song_list :
print(f'Title : {song.title},'
f'Singer : {song.singer},'
f'Play Time : {song.play_time}sec')
sleep(song.play_time)
else :
for song in self.song_list:
print(f'Title : {song.title},'
f'Singer : {song.singer},'
f'Play Time : {song.play_time}sec')
sleep(song.play_time)
def suffle(self):
random.shuffle(self.song_list)
def set_ifloop(self,flag):
self.isloop = flag
#실행파일
from module import mp3
s1 = mp3.Player('첫사랑','백야',3)
s2 = mp3.Player('민들레','우효',2)
s3 = mp3.Player('나에게 행복을 불러줘요','어바웃',5)
s4 = mp3.Player('바다','최유리',1)
s5 = mp3.Player('잊어야 한다는 마음으로','김광석',4)
s = mp3.Song()
s.add_song(s1)
s.add_song(s2)
s.add_song(s3)
s.add_song(s4)
s.add_song(s5)
s.set_ifloop(False)
s.suffle()
s.play()