Ch4 파이썬 중급 문제풀이 49-59 (중급문풀3-5)

김민지·2023년 3월 14일
0

Part 01. Python

목록 보기
11/12
  1. 모듈
  • 순열 구하기 (순서O)
from itertools import permutations
def getPermutations(ns, r):

    plist = list(permutations(ns, r))
    print(f'{len(ns)}P{r} 개수: {len(plist)}')

    for n in permutations(ns, r):
        print(n, end='')
import permutation as pt
listVar = [1, 2, 3, 4, 5, 6, 7, 8]
rVar = 3
pt.getPermutations(listVar, rVar)

-> 바로 순열 구해주는 모듈을 가져와 사용(순열 리스트를 뽑을 수 있음)

def getPermutationCnt(n, r):

    result = 1
    for n in range(n, n-r, -1):     
        print('n: {}'.format(n))
        result = result * n
    return result
import permutation as pt

numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))

print(f'{numN}P{numR}: {pt.getPermutationCnt(numN, numR)}')

-> 순열 구하는 공식을 써서 모듈 만들어 사용하기

  • 조합 구하기 (순서X)
def getCombinationCnt(n, r):

    for n in range(n, (n-r), -1):
        resultP = resultP * n

    for n in range(r, 0, -1):
        resultR = resultR * n

    resultC = int(resultP / resultR)

    return resultC
  1. 클래스
    모듈은 어렵고 클래스는 더더 어려움
    많이 접해서 익숙해지는 수밖엔 없을듯
    딕셔너리 구조도 생소하다
    클래스는 정보 추가, 정보 삭제, 정보 저장소, 정보 조회 등을 할 수 있어야
  • 클래스 상속 구조
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}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 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
  • 추상클래스의 추상메소드는 구현하면 안 됨
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]}')

-> 책 등록, 삭제, 수정, 검색, 출력 가능
-> 추상메소드를 쓰는 이유 : 이 메소드를 쓰라고 강제하기 위함

from time import sleep
import random

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:
            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 mp3player as mp3

s1 = mp3.Song('신호등', '이무진', 3)
s2 = mp3.Song('Permission to Dance', 'BTS', 4)
s3 = mp3.Song('Butter', 'BTS', 2)
s4 = mp3.Song('Weekend', '태연', 3)
s5 = mp3.Song('좋아좋아', '조정석', 3)

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

<제로베이스 데이터 취업 스쿨>

0개의 댓글