-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcalculator3.py
More file actions
149 lines (119 loc) · 4.52 KB
/
calculator3.py
File metadata and controls
149 lines (119 loc) · 4.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
class CourseHistory:
def __init__(self):
self.history = []
self.course_id_map = {'id': 10000}
self.submit_grade = {}
self.archive_grade = {}
# 점수 변환 함수
@classmethod
def get_gpa_score(cls, gpa):
match gpa:
case 'A+':
return 4.5
case 'A':
return 4
case 'B+':
return 3.5
case 'B':
return 3
case 'C+':
return 2.5
case 'C':
return 2
case 'D+':
return 1.5
case 'D':
return 1
case 'F':
return 0
# 과목코드 부여 함수
def allocate_course_id(self, course_name):
if course_name not in self.course_id_map:
new_id = str(int(self.course_id_map['id']) + 1)
self.course_id_map['id'] = new_id
self.course_id_map[course_name] = new_id
self.course_id_map[new_id] = course_name
return new_id
else:
return self.course_id_map[course_name]
# 입력 함수
def input_process(self):
course_name = input('과목명을 입력하세요: ')
course_id = self.allocate_course_id(course_name)
credit = input('학점을 입력하세요: ')
credit = int(credit)
gpa = input('평점을 입력하세요: ')
gpa_score = self.get_gpa_score(gpa)
# 열람용 학점 처리
if course_id in self.archive_grade:
# 재수강 처리
if gpa_score > self.archive_grade[course_id][1]:
self.archive_grade[course_id] = (credit, gpa_score)
else:
self.archive_grade[course_id] = (credit, gpa_score)
# 제출용 학점 처리
if gpa_score > 0.0:
if course_id in self.submit_grade:
# 재수강 처리
if gpa_score > self.submit_grade[course_id][1]:
self.submit_grade[course_id] = (credit, gpa_score)
else:
self.submit_grade[course_id] = (credit, gpa_score)
self.history.append((course_id, credit, gpa))
print('입력되었습니다.')
# 출력 함수
def print_process(self):
for course in self.history:
print('[' + self.course_id_map[course[0]] + '] ', end='')
print(str(course[1]) + '학점: ' + course[2])
# 조회 함수
def query_process(self):
course_name = input('과목명을 입력하세요: ')
for course in self.history:
if course_name == self.course_id_map[course[0]]:
print('[' + self.course_id_map[course[0]] + '] ', end='')
print(str(course[1]) + '학점: ' + course[2])
break
else:
print('해당하는 과목이 없습니다.')
# 계산 함수
def calculate_process(self):
submit_gpa, archive_gpa = 0.0, 0.0
submit_credit, archive_credit = 0, 0
for course_id in self.submit_grade:
submit_gpa += self.submit_grade[course_id][0] * self.submit_grade[course_id][1]
submit_credit += self.submit_grade[course_id][0]
for course_id in self.archive_grade:
archive_gpa += self.archive_grade[course_id][0] * self.archive_grade[course_id][1]
archive_credit += self.archive_grade[course_id][0]
submit_gpa /= submit_credit
archive_gpa /= archive_credit
print('제출용: ' + str(submit_credit) + '학점' + '(GPA: ' + str(submit_gpa) + ')')
print('열람용: ' + str(archive_credit) + '학점' + '(GPA: ' + str(archive_gpa) + ')')
# 실행 코드
course_history = CourseHistory()
# 무한 루프
while True:
# 출력
print('작업을 선택하세요')
print(' 1. 입력')
print(' 2. 출력')
print(' 3. 조회')
print(' 4. 계산')
print(' 5. 종료')
# 사용자 입력
user_input = input()
# 입력값별 작업
if user_input == '1':
course_history.input_process()
elif user_input == '2':
course_history.print_process()
elif user_input == '3':
course_history.query_process()
elif user_input == '4':
course_history.calculate_process()
elif user_input == '5':
break
else:
continue
print('프로그램을 종료합니다.')