Day18. 파이썬 중급문풀 (4)

Junghwan Park·2023년 4월 25일
0

스터디노트

목록 보기
19/54

[연습문제] 클래스(01)

  • 회원가입 클래스와 회원정보를 관리하는 클래스를 만들고 회원가입 로그인 기능을 구현해보자.

회원가입 / 전체회원 조회/ 로그인 / 회원 정보 삭제 후 전체회원 조회

실행파일

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('abc@gmail.com', '1234')  # 로그인
mems.loginMember('def@gmail.com', '5678')  # 로그인
mems.loginMember('ghi@gmail.com', '9012')  # 로그인

mems.removeMember('abc@gmail.com', '1234')  # 회원 삭제

mems.printMembers() # 회원삭제 후 전 회원 출력

클래스파일

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    # members에 id가 있으면

        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]}')

[연습문제] 클래스(02)

  • TV클래스를 다음과 같은 상속 구조로 만들고 객체를 생성해 보자.

NormalTv
속성 : inch, color, resolution, smartTv, aiTv
기능 : turnOn(), trunOff(), printTvInfo()

Normal ← Tv4K
기능 : setSmartTv

rmal ← Tv8K
기능 : setSmartTv, setAitv()

실행파일

import smartTv as st

# my4KTv = st.Tv4K('65', 'silver', '4K')
# my4KTv.setSmartTv('on')
# my4KTv.trunOn()
# my4KTv.printTvInfo()
# my4KTv.trunOff()
#
#
# friend4KTv = st.Tv4K('55', 'white', '4K')
# friend4KTv.setSmartTv('off')
# friend4KTv.trunOn()
# friend4KTv.printTvInfo()
# friend4KTv.trunOff()

my8KTv = st.Tv8K('75', 'black', '8K')
my8KTv.setSmartTv('on')
my8KTv.setAiTv('on')
my8KTv.trunOn()
my8KTv.printTvInfo()
my8KTv.trunOff()


friend8KTv = st.Tv8K('86', 'red', '8K')
friend8KTv.setSmartTv('on')
friend8KTv.setAiTv('off')
friend8KTv.trunOn()
friend8KTv.printTvInfo()
friend8KTv.trunOff()

클래스파일

class normalTv:

    def __init__(self, i = 32, c = 'black', r = 'full-HD'):    # 32인치, black 색상, full-HD
        self.inch = i
        self.color = c
        self.resolution = r
        self.smartTv = 'off'
        self.aiTv = 'off'

    def trunOn(self):
        print('TV power on!!')

    def trunOff(self):
        print('TV power 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'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):  # 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

[연습문제] 클래스(03)

  • 다음 명세서를 참고해서 도서 관리 프로그램을 만들어보자.'

서정보(도서명, 가격, isbn)
Book
속성 : name, price, isbn

서 저장소(도서 컨테이너, 도서 등록, 도서 삭제, 전체 도서 정보 출력, 도서 정보 출력)
BookRepository
속성 : bDic
기능 : registBook(), removeBook(), printBooksInfo(), printBookInfo()

실행파일

import book as bk

myBRepository = bk.BookRepository() # 책 저장소

myBRepository.registBook(bk.Book('python', 20000, '1234567890'))
myBRepository.registBook(bk.Book('java', 25000, '881972910'))
myBRepository.registBook(bk.Book('c/c++', 27000, '2939202020'))

myBRepository.printBooksInfo()
myBRepository.printBookInfo('2939202020')
myBRepository.removeBook('1234567890')
print()
myBRepository.printBooksInfo()

클래스파일

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

[연습문제] 클래스(04)

  • 다음 추상 클래스를 이용해서 한/영, 한/일 사전 클래스를 만들어보자.

실행파일

import ADictionary as dic

kTe = dic.KorToEng()

kTe.registWord('책', 'bok')
kTe.registWord('나비', 'butterfly')
kTe.registWord('연필', 'pencil')
kTe.registWord('학생', 'student')
kTe.registWord('선생님', 'teacher')

kTe.printWords()

kTe.updateWord('책', 'book')

kTe.printWords()

print(f'책 : {kTe.searchWord("책")}')

kTe.removeWord('책')

kTe.printWords()

클래스파일

# 추상 클래스를 사용하기 위해
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]}')

[연습문제] 클래스(05)

  • 주사위 게임 클래스를 만들고 컴퓨터와 사용자의 게임 결과를 출력해 보자.

실행파일

import dice

dc = dice.Dice   # 다이스 클래스 호출

dc.startGame()  # 주사위 굴림
dc.printResult()

클래스파일

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} >> 무승부!!')

[연습문제] 클래스(06)

  • 실행파일
    클래스파일

[연습문제] 클래스(07)

  • 실행파일
    클래스파일

이 글은 제로베이스 데이터 취업 스쿨의 강의자료 일부를 발췌하여 작성되었습니다.

profile
안녕하세요 반갑습니다^^

0개의 댓글