0417 파이썬 중급 7일차(~59)

박영선·2023년 4월 17일
0

클래스 연습문제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()
profile
데이터분석 공부 시작했습니다

0개의 댓글