Q. (레벨1) 성적처리프로그램을 만드시오. (국,영,수,총합,평균을 출력해야합니다)
class Member:
def __init__(self,num,name,kor,eng,math):
self.num = num
self.name = name
self.kor = kor
self.eng = eng
self.math = math
def Total(self):
self.total = self.kor+self.eng+self.math
print(self.total, ' ', end='')
def Avg(self):
self.avg = self.total/3
print(self.avg)
def printData(self):
print('번호 이름 국어 영어 수학 총점 평균')
print(self.num,self.name,self.kor,self.eng,self.math,' ', end='')
self.Total(), self.Avg()
def main():
c1 = Member('1','홍길동',50,60,70)
c1.printData()
c2 = Member('2','김철수', 85,98,32)
c2.printData()
c2 = Member('3','박혁거', 82,45,95)
c2.printData()
persons=[]
for i in range(0, 3):
persons.append(Member())
main()
class Member:
def __init__(self,num,name,kor,eng,math):
self.num = num
self.name = name
self.kor = kor
self.eng = eng
self.math = math
def Total(self):
self.total = self.kor+self.eng+self.math
print(self.total, ' ', end='')
def Avg(self):
self.avg = self.total/3
print(self.avg)
def printData(self):
print('번호 이름 국어 영어 수학 총점 평균')
print(self.num,self.name,self.kor,self.eng,self.math,' ', end='')
self.Total(), self.Avg()
def main():
c1 = Member('1','홍길동',50,60,70)
c1.printData()
c2 = Member('2','김철수', 85,98,32)
c2.printData()
c2 = Member('3','박혁거', 82,45,95)
c2.printData()
persons=[]
for i in range(0, 3):
persons.append(Member())
main()
우선 전체적으로 출력을 해보기 위해 뚱땅뚱땅 코드를 만들어보았다.
출력결과가 그럴듯하게 보이기 위해 print를 대충 얹어쓴느낌..?
이 부분이 마음에 들지 않지만 내가 할 수 있는 최선이었다...
Q. (단계2)
class Student:
def __init__(self,name='',num=0,score=[]):
self.name = name
self.num = num
self.score = score #국영수총평
def calc(self):
for i in range(0, 3):
self.score[3] += self.score[i]
self.score[4] = self.score[3]/3
def printInfo(self):
print(self.name, end='\t')
print(self.num, end='\t')
for i in self.score:
print(i, end='\t')
print()
def main():
c1=Student('aaa', 1, [67,87,56,0,0])
c1.calc()
c1.printInfo()
c2=Student('bbb', 2, [65,11,75,0,0])
c2.calc()
c2.printInfo()
c3=Student('ccc', 1, [87,21,64,0,0])
c3.calc()
c3.printInfo()
main()
기능을 조금 더 세분화시켰고, for문으로 프린트하는 값을 간결하게 표현했다.
성적처리에서 가장 중요한 부분은 총점과 평균을 연산해야하는 부분이기 때문에 점수부분들은 score=[]로 리스트에 담아버렸다!
Q. (단계 3) ★★★
class Score: #1명의 점수만 가지고 다루는 클래스
def __init__(self,kor,eng,math):
self.kor = kor
self.eng = eng
self.math = math
self.total = self.kor + self.eng + self.math
self.avg = self.total / 3
def printScore(self):
print(self.kor, end='\t')
print(self.eng, end='\t')
print(self.math, end='\t')
print(self.total, end='\t')
print(self.avg, end='\t')
print()
class Student: #1학생의 정보(score포함) 갖는 클래스
def __init__(self,name,num, score):
self.name = name
self.num = num
self.score = score #Score객체. 포함관계
def printMember(self):
print(self.name, end='\t')
print(self.num, end='\t')
self.score.printScore()
def main():
sc1 = Score(85, 64, 21)
s1 = Student('aaa', 1, sc1)
s1.printMember()
s2 = Student('bbb', 2, Score(45,61,94))
s2.printMember()
main()
객체지향적인 관점에서 볼 때, 함수들을 세분화시켜서 나누는 것이 유리한 것같다.
그래서 1명의 점수만 입력받는 클래스와 1명의 정보를 입력받는 클래스로 나누어서 짜준 뒤 확장하게 되면 메인함수가 더 간략해진다. (개인적으로 메인이 깔끔한 것이 마음 편하다)
코드를 짤 때 한번에 퉁쳐서 짜보려 하지 말고 1명 단위에서 다수의 단위로 넘어가게끔 연습해보자.
'파이썬이 제일 쉽다면서요' 카테고리의 다른 글
python #정적멤버와 정적메소드 (0) | 2021.06.10 |
---|---|
python #VO, DAO, Service (0) | 2021.06.10 |
python #연습문제 (0) | 2021.06.09 |
python #객체지향프로그래밍 (0) | 2021.06.09 |
python #예외처리 (0) | 2021.06.09 |