📗 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일차 후기
모듈은 개념 자체보다는 기존에 배웠던 자료형과 함수를 적절히 활용해서 푸는 거라, 고민이 길어졌다.
딕셔너리 자료형이 꽤 많이 쓰였는데, 아직 안배워서 검색으로 알음알음 했더니 알고보니 나중에 배울 거라서 그 때되면 더 잘 쓸 수 있겠구나 라는 생각도 들었다.
클래스 같은 경우에는 처음 개념을 잡을 때는 헷갈리는 부분도 많았는데, 그래도 유사한 연습문제들을 계속 작성하다보니 손에도 익고 머리에도 들어오는 듯 했다.
내일은 더 집중해서 해보쟈 ~
※본 내용은 제로베이스 데이터 취업 스쿨에서 제공하는 학습 내용에 기반합니다.
'제로베이스 데이터 스쿨 > 일일 스터디 노트' 카테고리의 다른 글
10일차 스터디노트 / 기초수학 약수와 소수, 최소공배수와 최소공약수, 진법, 등차수열 + 파이썬 / 제로베이스 데이터 취업스쿨 (1) | 2023.01.14 |
---|---|
9일차 스터디노트 / 파이썬 예외, 텍스트 파일 연습문제 풀이 / 제로베이스 데이터 취업스쿨 (0) | 2023.01.14 |
7일차 스터디노트 / 파이썬 텍스트 파일 쓰기, 읽기, 함수 연습문제 풀이/제로베이스 데이터 취업스쿨 (0) | 2023.01.11 |
6일차 스터디노트/ 파이썬 객체 지향 프로그래밍, 클래스, 예외 / 제로베이스 데이터 취업스쿨 (0) | 2023.01.09 |
5일차 스터디노트 / 파이썬 함수, 모듈, 패키지 / 제로베이스 데이터 취업스쿨 (0) | 2023.01.08 |