안녕하세요 점프 투 파이썬 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 오후