파이썬 09강. Chapter 16 성적처리기
- 교재
- 컴퓨팅 사고와 함께하는 파이썬 기초부터 인공지능 응용까지
- 김성백, 김철민, 박잔정 저
- 연두에디션
- 문제 : 학생의 성적을 처리하고자 한다. 학생의 성적은 중간고사, 기말고사, 과제에 의해서 결정된다. 학생별로 학생 이름, 중간고사, 기말고사, 과제성적을 입력받아 학생이 얻은 점수의 합과 평균을 구해서 알려주고 싶다.
- 소스 코드(단순코드)
123456789101112131415161718192021222324name = input('이름 입력 : ')midScore = int(input('중간 고사 성적 입력 : '))finalScore = int(input('기말 고사 성적 입력 : '))projectScore = int(input('과제 성적 입력 : '))sum = midScore + finalScore + projectScoreavg = sum / 3if avg >= 90:grade ='A'elif 80<= avg < 90:grade = 'B'elif 70 <= avg < 80:grade ='C'elif 60 <= avg < 70:grade = 'D'else:grade ='F'print("\n학생 이름=", name)print("합계=", sum)print("평균=", avg)print("성적 등급", grade) - 소스 코드(반복문 사용)
12345678910111213141516171819202122232425for i in range(3):name = input('이름 입력 : ')midScore = int(input('중간 고사 성적 입력 : '))finalScore = int(input('기말 고사 성적 입력 : '))projectScore = int(input('과제 성적 입력 : '))sum = midScore + finalScore + projectScoreavg = sum / 3if avg >= 90:grade ='A'elif avg >= 80:grade = 'B'elif avg >= 70:grade ='C'elif avg >= 60:grade = 'D'else:grade ='F'print("\n학생 이름=", name)print("합계=", sum)print("평균=", avg)print("성적 등급", grade) - 소스 코드(리스트 사용)
12345678910111213141516171819202122232425262728293031323334353637383940414243444546name = []midScore = []finalScore = []projectScore = []sum = []avg = []grade = []for i in range(3):n = input('이름 입력 : ')m = int(input('중간 고사 성적 입력 : '))f = int(input('기말 고사 성적 입력 : '))p = int(input('과제 성적 입력 : '))name.append(n)midScore.append(m)finalScore.append(f)projectScore.append(p)for i in range(3):s = midScore[i] + finalScore[i] + projectScore[i]a = s / 3if a >= 90:g ='A'elif a >= 80:g = 'B'elif a >= 70:g ='C'elif a >= 60:g = 'D'else:g ='F'sum.append(s)avg.append(a)grade.append(g)for i in range(3):print("\n학생 이름=", name[i])print("합계=", sum[i])print("평균=", avg[i])print("성적 등급", grade[i]) - 소스 코드(리스트 사용 2) : 이 코드를 수정하면 좀 더 좋은 코드가 되니 수정해보세요
12345678910111213141516171819202122232425262728293031323334353637name = [i for i in range(3)] * 3midScore = [0] * 3finalScore = [0] * 3projectScore = [0] * 3sum = [0] * 3avg = [0] * 3grade = [''] * 3for i in range(3):name[i] = input('이름 입력 : ')midScore[i] = int(input('중간 고사 성적 입력 : '))finalScore[i] = int(input('기말 고사 성적 입력 : '))projectScore[i] = int(input('과제 성적 입력 : '))for i in range(3):sum[i] = midScore[i] + finalScore[i] + projectScore[i]avg[i] = sum[i] / 3if avg[i] >= 90:grade[i] ='A'elif avg[i] >= 80:grade[i] = 'B'elif avg[i] >= 70:grade[i] ='C'elif avg[i] >= 60:grade[i] = 'D'else:grade[i] ='F'for i in range(3):print("\n학생 이름=", name[i])print("합계=", sum[i])print("평균=", avg[i])print("성적 등급", grade[i]) - 소스 코드(함수 사용 1) : 오류가 있으니 수정하여 사용 바람
12345678910111213141516171819202122232425262728293031def f_input():name = input('이름 입력 : ')midScore = int(input('중간 고사 성적 입력 : '))finalScore = int(input('기말 고사 성적 입력 : '))projectScore = int(input('과제 성적 입력 : '))def f_proc():sum = midScore + finalScore + projectScoreavg = sum / 3if avg >= 90:grade ='A'elif 80<= avg < 90:grade = 'B'elif 70 <= avg < 80:grade ='C'elif 60 <= avg < 70:grade = 'D'else:grade ='F'def f_print():print("\n학생 이름=", name)print("합계=", sum)print("평균=", avg)print("성적 등급", grade)f_input()f_proc()f_print() - 소스 코드(함수 사용 2) : 오류가 있으니 수정하여 사용 바람
123456789101112131415161718192021222324252627282930313233name, midScore, finalScore, projectScore, sum, avg, grade = 0, 0, 0, 0, 0, 0, ''def f_input():name = input('이름 입력 : ')midScore = int(input('중간 고사 성적 입력 : '))finalScore = int(input('기말 고사 성적 입력 : '))projectScore = int(input('과제 성적 입력 : '))def f_proc():sum = midScore + finalScore + projectScoreavg = sum / 3if avg >= 90:grade ='A'elif 80<= avg < 90:grade = 'B'elif 70 <= avg < 80:grade ='C'elif 60 <= avg < 70:grade = 'D'else:grade ='F'def f_print():print("\n학생 이름=", name)print("합계=", sum)print("평균=", avg)print("성적 등급", grade)f_input()f_proc()f_print() - 소스 코드(함수 사용 3)
1234567891011121314151617181920212223242526272829303132333435def f_input():name = input('이름 입력 : ')midScore = int(input('중간 고사 성적 입력 : '))finalScore = int(input('기말 고사 성적 입력 : '))projectScore = int(input('과제 성적 입력 : '))return name, midScore, finalScore, projectScoredef f_proc(m, f, p):sum = m + f + pavg = sum / 3if avg >= 90:grade ='A'elif 80<= avg < 90:grade = 'B'elif 70 <= avg < 80:grade ='C'elif 60 <= avg < 70:grade = 'D'else:grade ='F'return sum, avg, gradedef f_print(name, sum, avg, grade):print("\n학생 이름=", name)print("합계=", sum)print("평균=", avg)print("성적 등급", grade)n, mid, fin, pro = f_input()s, a, g = f_proc(mid, fin, pro)f_print(n, s, a, g) - 소스 코드(클래스 사용)
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950class Student:def __init__(self, name, midScore, finalScore, projectScore):self.name = nameself.midScore = midScoreself.finalScore = finalScoreself.projectScore = projectScoredef get_name(self):return self.namedef get_sum(self):return self.sumdef get_avg(self):return self.avgdef get_grade(self):return self.gradedef calculate(self):self.sum = self.midScore + self.finalScore + self.projectScoreself.avg = self.sum/3def set_grade(self):if self.avg >= 90:self.grade ='A'elif 80<= self.avg < 90:self.grade = 'B'elif 70 <= self.avg < 80:self.grade ='C'elif 60 <= self.avg < 70:self.grade = 'D'else:self.grade ='F'name = input('이름 입력 : ')midScore = int(input('중간 고사 성적 입력 : '))finalScore = int(input('기말 고사 성적 입력 : '))projectScore = int(input('과제 성적 입력 : '))student1 = Student(name, midScore, finalScore, projectScore)student1.calculate()student1.set_grade()print("\n학생 이름=", student1.get_name())print("합계=", student1.sum)print("평균=", student1.get_avg())print("성적 등급", student1.get_grade()) - 성적처리(딕셔너리 사용)
1234567891011121314151617181920212223st = {}st['이름'] = input('이름 입력 : ')st['midScore'] = int(input('중간 고사 성적 입력 : '))st['finalScore'] = int(input('기말 고사 성적 입력 : '))st['projectScore'] = int(input('과제 성적 입력 : '))st['sum'] = st['midScore'] + st['finalScore'] + st['projectScore']st['avg'] = st['sum'] / 3if st['avg'] >= 90:st['grade'] ='A'elif 80<= st['avg'] < 90:st['grade'] = 'B'elif 70 <= st['avg'] < 80:st['grade'] ='C'elif 60 <= st['avg'] < 70:st['grade'] = 'D'else:st['grade'] ='F'print(st)