[Zerobase][Python Mid] 클래스 문제풀이 (w/hell..)

솔비·2023년 11월 29일
0

💻 Python. w/zerobase

목록 보기
11/33
post-thumbnail

오늘의 주저리주저리
'잘하고 있는가' 에 대한 성찰은 주기적으로 불안감을 가져온다.
하지만 어쩌겠는가 그럼에도 불구하고 할건 해야지 🫥


파이썬 문제풀이

📖 1번문제

#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가 되는 것일까 ㅜㅜ..
일단은 실행되는 것만으로도 만족했던 문제였다.

📖 2번문제

#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 메서드 실행 시 해당 기능이 켜져있는지 꺼져있는지 확인 할 수 있다.

문제만 보고 풀기는 다소 어려웠지만,
풀이를 보고 코드를 짜보니 이해는 되었다 !

📖 3번문제

#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
모듈을 사용하여
추상클래스(=하위클래스에서 기능구현)을 하고

하위클래스에서 상속받은 후 해당 기능을 실현시킨다.

📖 4번문제

#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입니다.

📖 5번문제

업로드중..

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를 넣어두니 한결 코드가 간단해졌다.

📖 6번문제

업로드중..

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()

📖 7번문제

업로드중..

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()

제로베이스 데이터취업스쿨
Daily Study Note
profile
Study Log

0개의 댓글