모듈
# 국어, 영어, 수학 점수를 입력하면 총점, 평균을 출력하는 모듈
scores = []
def addScore(s) :
scores.append(s)
def getScores() :
return scores
def getTotalScore() :
total = 0
for s in scores :
total += s
return total
def getAvgScore() :
avg = getTotalScore() / len(scores)
return avg
import scores as sc
korScore = int(input('국어 점수 입력 : '))
engScore = int(input('영어 점수 입력 : '))
matScore = int(input('수학 점수 입력 : '))
sc.addSCore(korScore)
sc.addSCore(engScore)
sc.addSCore(matScore)
print(sc.getScores())
print(sc.getTotalScore())
print(sc.getAvgScore())
객체와 메모리
# 국어, 영어, 수학 점수를 입력받아 리스트에 저장하고 원본을 유지한 상태로 복사본 생성
# 과목별 점수를 10% 올렸을 경우에 평균을 출력해보자.
scores = [int(input('국어 점수 입력 : ')),
int(input('영어 점수 입력 : ')),
int(input('수학 점수 입력 : '))]
print(scores)
copyScores = scores.copy()
for idx,score in enumerate(copyScores) :
result = score * 1.1
copyScores[idx] = 100 if result > 100 else result
print('이전 평균 : %.2f' % (sum(scores) / len(scores)))
print('이후 평균 : %.2f' % (sum(copyScores) / len(copyScores)))
얕은 복사와 깊은 복사
# 선수의 원본 점수를 이용해서 평균을 출력
# 최고값과 최저값을 제외한 평균을 출력해야 함
plaOriSco = [8.7, 9.1, 8.9, 9.0, 7.9, 9.5, 8.8, 8.3]
plaCopSco = plaOriSco.copy()
plaOriSco.sort()
plaCopSco.sort()
plaCopSco.pop(0) # 최저값 제외
plaCopSco.pop() # 최고값 제외
print('plaOriSco : {}'.format(plaOriSco))
print('plaCopSco : {}'.format(plaCopSco))
oriTot = round(sum(plaOriSco), 2)
oriAvg = round(oriTot / len(plaOriSco), 2)
print('Original Total : {}'.format(oriTot))
print('Original Average : {}'.format(oriAvg))
copTot = round(sum(plaCopSco), 2)
copAvg = round(copTot / len(plaCopSco), 2)
print('Copy Total : {}'.format(copTot))
print('Copy Average : {}'.format(copAvg))
print('oriAvg - copAvg = {}'.format(oriAvg - copAvg))
클래스 상속
# 중간고사 클래스와 기말고사 클래스를 상속관계로 만들고 각각의 점수를 초기화
# 총점 및 평균 반환 기능도 추가
class MidExam :
def __init__(self, s1,s2,s3) :
print('[MidExam] __init__()')
self.mid_kor_score = s1
self.mid_eng_score = s2
self.mid_mat_score = s3
def printScores(self) :
print(f'mid_kor_score : {self.mid_kor_score}')
print(f'mid_eng_score : {self.mid_eng_score}')
print(f'mid_mat_score : {self.mid_mat_score}')
class EndExam(MidExam) :
def __init__(self, s1,s2,s3,s4,s5,s6) :
print('[EndExam] __init__()')
super().__init__(s1,s2,s3)
self.end_kor_score = s4
self.end_eng_score = s5
self.end_mat_score = s6
def printScores(self) :
super().printScores()
print(f'end_kor_score : {self.end_kor_score}')
print(f'end_eng_score : {self.end_eng_score}')
print(f'end_mat_score : {self.end_mat_score}')
def getTotalScore(self) :
total = self.mid_kor_score + self.mid_eng_score + self.mid_mat_score
total += (self.end_kor_score + self.end_eng_score + self.end_mat_score)
return total
def getAverageScore(self) :
return self.getTotalScore() / 6
exam = EndExam(85, 90, 88, 75, 85, 95)
exam.printScores() #기말 점수
print(f'Total : {exam.getTotalScore()}')
print(f'Average : {exam.getAverageScore()}')
오버라이딩
# 삼각형 넓이를 계산하는 클래스를 만들고 이를 상속하는 클래스에서 getArea()를 오버라이딩
class TriangleArea :
def __init__(self, w, h) :
self.width = w
self.height = h
def printTriangleAreaInfo(self) :
print(f'width : {self.width}')
print(f'height : {self.height}')
def getArea(self) :
return self.width * self.height / 2
class NewTriangleArea(TriangleArea) :
def __init__(self,w,h) :
super().__init__(w,h)
def getArea(self):
return str(super().getArea())+'㎠'
ta = NewTriangleArea(7,5)
ta.printTriangleAreaInfo()
triangleArea = ta.getArea()
print(f'TriangleArea : {triangleArea}')