본문 바로가기
제로베이스 데이터 스쿨/일일 스터디 노트

8일차 스터디노트 / 파이썬 모듈, 클래스 연습문제 풀이 / 제로베이스 데이터 취업 스쿨

by 김뎀뎀 2023. 1. 12.

📗 8일차 공부 내용 요약

[ 파이썬 ]

1. 모듈 연습문제 풀이 : 모듈에 대한 개념을 복습하고 연습문제를 풀었다

2. 클래스 : 클래스에 대한 개념을 복습하고 연습문제를 풀었다.

 


📖  8일차 공부 내용 자세히

1. 모듈 연습문제 풀이

※ 기억에 남는 문제 위주로 기재해본다

Q.상품 구매 개수에 따라 할인율이 결정되는 모듈을 만들고, 계산 결과가 출력되는 프로그램을 만들어보자
#모듈
def calculatorTotalPrice(gs): #상품의 가격을 리스트로 받는다

    if len(gs) == 0 :
        print('구매 상품이 없습니다.')
        return

    rate = 25
    totalPrice = 0

    rates = {1:5, 2:10, 3:15, 4:20}

    if len(gs) in rates : #상품의 개수가 rates 모듈에 있다면
        rate = rates[len(gs)] #해당하는 할인율을 뽑는다

    for g in gs:
        totalPrice += g * (1 - rate * 0.01)


    return [ rate, int(totalPrice)]

def formatedNumber(n):
    return format(n,',')

#실행
import  discount as dc

if __name__ == '__main__':

    flag = True
    gs = []

    while flag:

        selectNumber = int(input('1.구매 2.종료'))

        if selectNumber == 1:
            goods_price = int(input('상품 가격 입력 : '))
            gs.append(goods_price)
        else:
            result = dc.calculatorTotalPrice(gs)
            flag = False

    print(f'할인율 : {result[0]}')
    print(f'합계 : {dc.formatedNumber(result[1])}원')

 

Q.로또 모듈을 만들고 로또 결과가 출력될 수 있도록 프로그램을 만들어보자.
#모듈
import random

userNums = [] ;  randNums = [] ; collNums = []
randBonusNum = 0

def setUserNums(ns):
    global userNums
    userNums = ns

def getUserNums():
    return userNums

def setRandNums():
    global randNums
    randNums = random.sample(range(1,46),6)

def getRandNums():
    return randNums

def setBonusNum():
    global  randBonusNum

    while True:
        randBonusNum = random.randint(1,46)
        if randBonusNum not in randNums:
            break

def getBonusNum():
    return randBonusNum

def lottoResult():
    global userNums
    global randNums
    global collNums

    for un in userNums:
        if un in randNums:
            collNums.append(un)

    if len(collNums) == 6:
        print('1등 당첨 !!')
        print(f'번호 : {collNums}')

    elif (len(collNums) == 5) and (randBonusNum in userNums):
        print('2등 당첨 !!')
        print(f'번호 : {collNums}, 보너스 번호 : {randBonusNum}')

    elif len(collNums) == 4 :
        print('3등 당첨 !!')
        print(f'번호 : {collNums}')

    elif len(collNums) == 3 :
        print('5등 당첨 !!')
        print(f'번호 : {collNums}')

    else:
        print('아쉽습니다. 다음 기회에~')
        print(f'기계 번호 : {randNums}')
        print(f'보너스 번호 : {randBonusNum}')
        print(f'선택번호 : {userNums}')
        print(f'일치번호 : {collNums}')

def startLotto():
    n1 = int(input('번호(1~45)입력: '))
    n2 = int(input('번호(1~45)입력: '))
    n3 = int(input('번호(1~45)입력: '))
    n4 = int(input('번호(1~45)입력: '))
    n5 = int(input('번호(1~45)입력: '))
    n6 = int(input('번호(1~45)입력: '))

    selectNums = [n1, n2, n3, n4, n5, n6]

    setUserNums(selectNums)
    setRandNums()
    setBonusNum()

    lottoResult()

#실행
import lotto as lt

lt.startLotto()

 

Q. 순열 계산 모듈을 만들어보자
#모듈
def getPermutationCnt(n, r, logPrint = True):

    result = 1
    for n in range(n, (n-r), -1):
        if logPrint: print('n:{}'.format(n))
        result = result * n

    return result

from itertools import permutations

def getPermutations(ns,r):

    pList = list(permutations(ns,r))
    print(f'{len(ns)}P{r} rotn : {len([list])}')

    for n in permutations(ns,r):
        print(n,end='')

#실행
import permutation as pt

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

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


listVar = [1,2,3,4,5,6,7,8]
rVar = 3
pt.getPermutations(listVar, rVar)

 

1. 클래스 연습문제 풀이

※ 기억에 남는 문제 위주로 기재해본다

Q. TV 클래스를 상속 구조로 만들고 객체를 생성새보자
#모듈
class NomalTV:

    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 turn on !')

    def turnOff(self):
        print('TV turn 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(NomalTV):

    def __init__(self, i, c, r='4k'):
        super().__init__(i, c, r)

    def setSmartTV(self, s):
        self.smartTv = s


class TV8K(NomalTV):

    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

#실행
import smartTV as st

my4KTv = st.Tv4K('65', 'silver', '4k')
my4KTv.setSmartTV('on')
my4KTv.turnOn()
my4KTv.printTvinfo()
my4KTv.turnOff()

my8KTv = st.TV8K('75','black', '8K')
my8KTv.setSmartTV('on')
my8KTv.setAiTv('on')
my8KTv.turnOn()
my8KTv.printTvinfo()
my8KTv.turnOff()

 

Q.주사위 게임 클래스를 만들고 컴퓨터와 사용자의 게임 결과를 출력해보자
#모듈
import random


class Dice:

    def __init__(self):
        self.cnum = 0
        self.unum = 0

    def setCum(self):
        print('[Dice] setCnum()')
        self.cnum = random.randint(1, 6)

    def setUnum(self):
        print('[Dice] setCnum()')
        self.unum = random.randint(1, 6)

    def startGame(self):
        print('[Dice] StartGame()')

        self.setCum()
        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} >> 유저 승!')
            else:
                print(f'컴퓨터 vs 유저 : {self.cnum} vs {self.unum} >> 무승부!')

#실행
import dice

dc = dice.Dice()

dc.startGame()
dc.printResult()

➰ 8일차 후기

모듈은 개념 자체보다는 기존에 배웠던 자료형과 함수를 적절히 활용해서 푸는 거라, 고민이 길어졌다.

딕셔너리 자료형이 꽤 많이 쓰였는데, 아직 안배워서 검색으로 알음알음 했더니 알고보니 나중에 배울 거라서 그 때되면 더 잘 쓸 수 있겠구나 라는 생각도 들었다.

클래스 같은 경우에는 처음 개념을 잡을 때는 헷갈리는 부분도 많았는데, 그래도 유사한 연습문제들을 계속 작성하다보니 손에도 익고 머리에도 들어오는 듯 했다.

내일은 더 집중해서 해보쟈 ~


※본 내용은 제로베이스 데이터 취업 스쿨에서 제공하는 학습 내용에 기반합니다.