파이썬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()
길고 길었던 프로그램을 짜는 것도 오늘이 마지막이 될 지도 모르겠네요~
가끔 한 번씩은 프로그램을 짜 볼지도 모르겠습니다만,
처음으로 건드려 본 프로그램 언어인 파이썬, 상당히 재미있는 녀석이었습니다 ^^*
-
'IT 이것저것 > 파이썬python' 카테고리의 다른 글
파이썬으로, 네이버 자동로그인 하는 프로그램 짜기 (0) | 2019.08.28 |
---|---|
파이썬python 외전 - 윤년 계산기 (0) | 2017.06.17 |
파이썬python 성적 처리 프로그램을 짜보자 - 파일 처리 방법 (0) | 2017.06.17 |
파이썬python 정렬을 위한 sorted 함수! (0) | 2017.06.12 |
파이썬python 람다lambda 함수라는건? (0) | 2017.06.08 |
댓글