안녕하세요 점프 투 파이썬 04-3 파일 읽고 쓰기 관련 질문입니다.

안녕하세요. 점프 투 파이썬을 보고 공부를 하고 있는 학생입니다.
여러 문제를 풀어보고 있는데 04-3 파일 읽고 쓰기와 관련이 있는 것 같아 여기에 질문합니다.

다음 score.txt 파일을 읽고 각 점수의 총점을 구한 후 평균을 인쇄하시오.
마지막 줄에는 각 과목 및 총점의 평균을 구하고 인쇄하시오.(학생인원수는 미정)

  score.txt..........................aver.txt
김멍멍 90 80 70............이름   국어  영어     수학  총점  평균
오멍멍 60 50 60...........김멍멍    90      80     70     240    80.00
박멍멍 82 20 80...........오멍멍   60   50     60     170    56.67 
...........................................박멍멍    82   20     80    ?     xx.xx
...........................................(한줄 띄움)
...........................................**평균:    76.67   50.00   70.00    ?  xx.xx** 
  • 3번 문제에서 각 점수가 0점 미만 이나 100점 초과인 경우 입력오류메세지를 제공하는 예외처리 프로그램을 구현하시오.
사례) score.txt ........................출력화면:            
김멍멍 90 800 70...................입력오류 발생했습니다.                    
오멍멍 60 50 60
박멍멍 82 20 80

위와 같은 파이썬 문제를 해결해야 하는데 진하게 표시 된 부분이
score.txt의 마지막 점수와 동일한 값이 나옵니다.
아래는 제가 입력한 코드입니다.

try:
  f1 = open('score.txt', 'r')
  lines = f1.readlines()
  f1.close()
  f2 = open('aver.txt', 'w')
  data = "이름\t국어\t영어\t수학\t총점\t평균\n"
  f2.write(data)
  for line in lines:            
    line = line.split(' ')
    name = line[0]
    korean = int(line[1])
    english = int(line[2])
    math = int(line[3])
    if korean > 100 or english > 100 or math > 100:     
      raise Exception("입력오류 발생했습니다.")
    if korean < 0 or english < 0 or math < 0:
      raise Exception("입력오류 발생했습니다.")
    result = korean + english + math                
    average = round(result / 3, 2)
    info = "%s\t%d\t%d\t%d\t%d\t%d\n" %(name, korean, english, math, result, average)
    f2.write(info)
  ko_sum = 0                
  en_sum = 0
  ma_sum = 0
  for i in range(len(lines)):
    ko_sum = ko_sum + korean
    ko_aver = ko_sum / len(lines)
    en_sum = en_sum + english
    en_aver = en_sum / len(lines)
    ma_sum = ma_sum + math
    ma_aver = ma_sum / len(lines)
  sub_sum = ko_sum + en_sum + ma_sum
  sub_aver = round(sub_sum / (len(line) - 1), 2)
  f2.write('\n평균:\t' + str(ko_aver) + '\t' + str(en_aver) + '\t' + str(ma_aver) + '\t' + str(sub_sum) + '\t' + str(sub_aver))
  f2.close()
except Exception as err:                            
  print("예외 발생: {0}".format(err))

이 문제 때문에 밤에 잠을 잘 수가 없습니다.
감사합니다B)

jsbo4253 1282

M 2020년 7월 30일 6:52 오후

목록으로
1개의 답변이 있습니다. 1 / 1 Page

점프 투 파이썬 문제는 아니네요 ^^

두번째 for문에서 사용한 korean, english, math 는 가장 마지막 줄의 데이터로 고정되어 있어서 잘못된거 같네요.
테스트는 해보지 않았지만 아래와 비슷하게 수정하면 될것 같습니다.

ko_sum = 0                
en_sum = 0
ma_sum = 0

for line in lines:            
    line = line.split(' ')
    name = line[0]
    korean = int(line[1])
    english = int(line[2])
    math = int(line[3])
    if korean > 100 or english > 100 or math > 100:     
      raise Exception("입력오류 발생했습니다.")
    if korean < 0 or english < 0 or math < 0:
      raise Exception("입력오류 발생했습니다.")
    result = korean + english + math                
    average = round(result / 3, 2)
    info = "%s\t%d\t%d\t%d\t%d\t%d\n" %(name, korean, english, math, result, average)
    f2.write(info)

    ko_sum = ko_sum + korean
    en_sum = en_sum + english
    ma_sum = ma_sum + math


ko_aver = ko_sum / len(lines)
en_aver = en_sum / len(lines)
ma_aver = ma_sum / len(lines)    

박응용

2020년 7월 30일 6:58 오후