본문 바로가기
IT 이것저것/파이썬python

파이썬python 본격적으로 학생 성적 관리 프로그램을 만들어 보자!

by KaNonx카논 2017. 6. 19.
반응형

 

파이썬python 본격적으로 학생 성적 관리 프로그램을 만들어 보자!

 

 

2017/06/01 - 파이썬python 성적 처리 프로그램을 짜자! ~ 학생 데이터 입력

 

2017/06/04 - 파이썬python 성적 처리 프로그램을 짜자! - 학생 데이터 입력2

 

2017/06/08 - 파이썬python 람다lambda 함수라는건?

 

2017/06/12 - 파이썬python 정렬을 위한 sorted 함수!

 

2017/06/17 - 파이썬python 성적 처리 프로그램을 짜보자 - 파일 처리 방법

 

여러가지 함수를 넣어본다고 성적 처리 프로그램을 만드는데 상당히 오래 걸렸습니다!

 

오늘, 파이썬 성적 처리 프로그램을 만드는 것을 끝내볼까 해요~

 

 

우선,

 

workplace

 

kim 50 90 40
sss 10 100 60
ddd 90 50 30
gfsdf 99 100 80

 

라고 작성한 엑셀파일을 csv 로 만들어


students.csv 란 파일을 작성합니다.

 

 

그 뒤에 파이썬으로 파일을 불러오려면

 

 
if __name__ == "__main__":
    fp = open('./students.csv','r')
    lines = fp.readlines()
    fp.close()
   
    print(lines)

 

이 문구를 쓰면 됩니다.

 

students.csv 라는 파일을 r(읽기위해) 불러오라 맞지요? ㅎㅎ

 

이렇게 파일을 불러오면 결과창에

 

 ['kim,50,90,40\n', 'sss,10,100,60\n', 'ddd,90,50,30\n', 'gfsdf,99,100,80\n']

 

라는 형식으로 불려오게 됩니다.

 

읭? 그런데 \n라는 건 뭔데 저렇게 나와있는걸까요??

 

 

여기서 \n이라는 건 한 줄 띄우라는 명령어, 눈에 보이지 않는 공백 문자, '화이트 스페이스'라고 하지요

 

 

'화이트 스페이스'는 세 종류가 있지요,

 

첫째 '스페이스',

 

 둘째 '탭',

 

셋째'뉴 라인(엔터)'입니다.

 

\n은 한 줄 띄우라는 뉴 라인입니다. 사족으로 탭은 \t라고 표현되지요

 

 

이런 현상을 없애려면, strip 이라는 함수가 필요합니다.

 

 
if __name__ == "__main__":
    fp = open('./students.csv','r')
    lines = fp.readlines()
    fp.close()
   
   
    for line in lines:
        line = line.strip()
        print(line)


 

 


이렇게 사용한다면

 

kim,50,90,40
sss,10,100,60
ddd,90,50,30
gfsdf,99,100,80

 

와 같이 한 줄 한 줄 붙어서 나오게 되지요.

 

 

그리고 콤마 단위로 나누기도 해야겠지요!

 

         items = line.split(',')
        print(items)

 


이렇게 split 함수를 이용하여 각각의 구성요소를 자를 수 있습니다.

 

['kim', '50', '90', '40']
['sss', '10', '100', '60']
['ddd', '90', '50', '30']
['gfsdf', '99', '100', '80']

 

이러면 파이썬이 어떤게 어떤 요소인지 알아보기 쉽겠지요?

 


좋습니다.

 

이제 식을 한 번 본래의 프로그램에 카와이하게 넣어볼게요

 

 

students = []
   
    fp = open('./students.csv','r')
    lines = fp.readlines()
    fp.close()
   
    for line in lines:
        line = line.strip()  
        items = line.split(',')
       
        student = {}
        student['id'] = int(items[0])
        student['name'] = items[1]
        student['kor'] = int(items[2])
        student['eng'] = int(items[3])
        student['math'] = int(items[4])
        student['total'] = 0
        student['avg'] = 0.0
        student['ranking'] = 0
       
        students.append(student)

 

 


어때요? 알고보니 참 쉽지요?

 

여기에서 append는 첨부하다는 뜻으로 위의 'id' 'name' ...등등을 하나의 [] 안에 담으라는 함수입니다.


결과적으로

 

 

 

 def main():

    students = []
   
    fp = open('./students.csv','r')
    lines = fp.readlines()
    fp.close()
   
    for line in lines:
        line = line.strip()  
        items = line.split(',')
       
        student = {}
        student['id'] = int(items[0])
        student['name'] = items[1]
        student['kor'] = int(items[2])
        student['eng'] = int(items[3])
        student['math'] = int(items[4])
        student['total'] = 0
        student['avg'] = 0.0
        student['ranking'] = 0
       
        students.append(student)
       
    for student in students:
        student['total'] = student['kor'] + student['eng'] + student['math']
        student['avg'] = student['total'] / 3   
          
    sorted_students = sorted(students, key = lambda x : x['total'], reverse=True)

    count = 1
    for student in sorted_students:
        student['ranking'] = count
        count = count + 1
       
    result_students = sorted(sorted_students, key = lambda x : x['id'])
       
    for student in sorted_students:
        print(student)

 

라는 프로그램으로 학생들의 성적처리가 가능해 졌습니다!

 

 

마지막으로 이것을 파일로 내어보겠습니다.

 

 
   fp = open('./result_students.csv', 'w')
   
    for student in result_students:
        line = ','.join([str(student['id']),str(student['name']),str(student['kor']),str(student['eng']),
                         str(student['math']),str(student['total']),str(student['avg']),str(student['ranking']),'\n'])
        fp.write(line)
       
    fp.close()
       
    for student in sorted_students:
        print(student)

 

가 되는 것이지요,

 

완전한 학생 성적 관리 프로그램의 형태는 아래와 같습니다.

 

 def main():

    students = []
   
    fp = open('./students.csv','r')
    lines = fp.readlines()
    fp.close()
   
    for line in lines:
        line = line.strip()  
        items = line.split(',')
       
        student = {}
        student['id'] = int(items[0])
        student['name'] = items[1]
        student['kor'] = int(items[2])
        student['eng'] = int(items[3])
        student['math'] = int(items[4])
        student['total'] = 0
        student['avg'] = 0.0
        student['ranking'] = 0
       
        students.append(student)
       
    for student in students:
        student['total'] = student['kor'] + student['eng'] + student['math']
        student['avg'] = student['total'] / 3   
          
    sorted_students = sorted(students, key = lambda x : x['total'], reverse=True)

    count = 1
    for student in sorted_students:
        student['ranking'] = count
        count = count + 1
       
    result_students = sorted(sorted_students, key = lambda x : x['id'])
   
    fp = open('./result_students.csv', 'w')
   
    for student in result_students:
        line = ','.join([str(student['id']),str(student['name']),str(student['kor']),str(student['eng']),
                         str(student['math']),str(student['total']),str(student['avg']),str(student['ranking']),'\n'])
        fp.write(line)
       
    fp.close()
       
    for student in sorted_students:
        print(student)
    
if __name__ == "__main__":
    main()

 

길고 길었던 프로그램을 짜는 것도 오늘이 마지막이 될 지도 모르겠네요~

 

가끔 한 번씩은 프로그램을 짜 볼지도 모르겠습니다만,

 

처음으로 건드려 본 프로그램 언어인 파이썬, 상당히 재미있는 녀석이었습니다 ^^*

 

 

 

 

 

-

 

반응형

댓글