본문 바로가기
프로그램

[파이썬] 문제 : 5명 학생 점수 입력 받아 파일 저장, 평균 계산

by 오디세이99 2022. 12. 11.
728x90
반응형

 

f = open('students.txt', 'w')            # 파일 열기. 쓰기로 열기
cnt = 0                                  # while문을 사용하기 때문에 while 반복이 5번 하도록 Count  함
while cnt < 5:                          # while문. cnt가 5보다 작으면 반복. cnt가 0부터 시작하니 <5 가 됨.
    s_name = input('이름 입력 : ')                     # 이름 입력 받음
    v1 = int(input('중간고사 점수 : '))                # 점수 입력 받음. 점수 문자열을 입력받고 정수 변환. 꼭 정수변환이 필요하지 않음
    v2 = int(input('기말고사 점수 : '))                # 입력 받은 점수를 파일에 쓸 거라서 정수변환을 꼭 할 필요는 없음
    f.write(s_name + ', ' + str(v1) + ', ' + str(v2) + '\n')  # 파일에 쓰기.
    cnt += 1                             # cnt 1씩 증가. 빼먹으면 무한 반복 됨
    
f.close()                                 # 파일 닫기

f = open('students.txt', 'r')                # 파일 열기. 읽기로 열기
lines = f.readlines()                        # 라인데이터 읽기
f.close()                                    # 파일 닫기

print(" 이름   중간  기말  총점  평균 학점") # 첫줄 제목 출력
for li in lines:                            # 라인 데이터 수 만큼 반복. whlie문 사용하지 않기
    li = li.strip()                          # 라인 끝에 줄바꿈('\n') 문자 제거
    tmp = li.split(',')                      # ',' 문자로 분리. 이름,중간점수,기말점수 분리
    tot = int(tmp[1]) + int(tmp[2])          # 합계 계산. 점수는 문자열이라서 정수로 변환 후 계산
    avg = tot/2                              # 평균 계산. 점수가 2개 이므로 합계를 2로 나눔
    credit = ''                              # 학점 변수
    if avg >= 90:                           # 평균에 따른 학점 부여
        credit = 'A'
    elif avg < 90 and avg >= 80:
        credit = 'B'
    elif avg < 80 and avg >= 70:
        credit = 'C'
    elif avg < 70 and avg >= 60:
        credit = 'D'
    elif avg < 60:
        credit = 'F'
        
    print(f"{tmp[0]} {tmp[1]:>5}  {tmp[2]:>4}  {tot}  {avg:>5}  {credit}") # 출력. ':>5'하면 5자리 채우고 오른쪽 정렬 뜻

 

728x90
반응형

댓글