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

+ Recent posts