-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtepython.py
169 lines (138 loc) · 6.09 KB
/
tepython.py
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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
# -*- coding: utf-8 -*-
import os
import time
from fractions import Fraction
화면지우기 = lambda: os.system("cls" if os.name=="nt" else "clear")
평점대응목록 = {
'A+': Fraction(43, 10),
'A0': Fraction(40, 10),
'A-': Fraction(37, 10),
'B+': Fraction(33, 10),
'B0': Fraction(30, 10),
'B-': Fraction(27, 10),
'C+': Fraction(23, 10),
'C0': Fraction(20, 10),
'C-': Fraction(17, 10),
'D+': Fraction(13, 10),
'D0': Fraction(10, 10),
'D-': Fraction( 7, 10),
'F' : Fraction( 0, 10),
}
class 학기:
def __init__(self, 연도, 계절, 수강강의목록=[]):
assert type(연도)==int
assert type(계절)==str
for 수강강의 in 수강강의목록:
assert isinstance(수강강의, 강의)
self.연도 = 연도
self.계절 = 계절
self.수강강의목록 = []
self.수강학점 = 0
self.평점산정학점 = 0
self.평균평점 = 0
for 수강강의 in 수강강의목록:
self.강의추가(수강강의)
def 강의추가(self, 수강강의):
self.수강강의목록.append(수강강의)
if 수강강의.학점 is None:
print(수강강의.강의명 + "의 학점이 지정되지 않았습니다!")
return
self.수강학점 += 수강강의.학점
if 수강강의.평점 is None:
print(수강강의.강의명 + "의 평점이 지정되지 않았습니다!")
return
self.평균평점 = (self.평균평점 * self.평점산정학점 + 평점대응목록[수강강의.평점] * 수강강의.학점) / (self.평점산정학점 + 수강강의.학점)
self.평점산정학점 += 수강강의.학점
def 통계(self):
if self.평균평점 > 0:
print("%d년 %s학기의 수강 학점은 %d이고 평균 평점은 %.2f입니다." % (self.연도, self.계절, self.수강학점, int(self.평균평점 * 100) / 100))
else:
print("%d년 %s학기의 수강 학점은 %d입니다." % (self.연도, self.계절, self.수강학점))
class 강의:
def __init__(self, 강의명, 수강학기, 학점=None, 평점=None):
assert type(강의명)==str
assert isinstance(수강학기, 학기)
assert 학점 is None or type(학점)==int
assert 평점 is None or 평점 in 평점대응목록
self.강의명 = 강의명
self.학기 = 학기
self.학점 = 학점
self.평점 = 평점
def __repr__(self):
출력값 = "강의명: " + self.강의명
if 학점 is not None:
출력값 += "\n학점: " + str(self.학점)
if 평점 is not None:
출력값 += "\n평점: " + self.평점
return 출력값
전체수강학기 = []
수강강의목록 = []
while True:
화면지우기()
print("학기를 추가하려면 1, 강의를 추가하려면 2, 학기 정보를 확인하려면 3을 입력하세요.")
입력모드 = int(input())
if 입력모드 not in list(range(4)):
print("잘못 입력하셨습니다.")
time.sleep(0.5)
continue
if 입력모드==1:
print("추가할 학기 연도를 입력하세요. (예: 2018)")
# TODO - 예외 처리 (연도나 계절이 각각 정수나 문자열이 아닐 경우)
입력연도 = int(input())
print("추가할 학기 계절을 입력하세요. (예: 봄)")
입력계절 = input()
print("%d년 %s학기를 추가할까요? [y/n]" % (입력연도, 입력계절))
추가여부 = input()
if 추가여부=='y':
전체수강학기.append(학기(입력연도, 입력계절))
print("%d년 %s학기가 추가되었습니다." % (입력연도, 입력계절))
else:
print("취소되었습니다.")
time.sleep(0.5)
elif 입력모드==2:
if 전체수강학기 == []:
print("학기를 먼저 추가하세요!")
time.sleep(0.5)
continue
print("강의를 추가할 학기 번호를 선택하세요.")
for i in range(len(전체수강학기)):
print("%d: %d년 %s학기" % (i, 전체수강학기[i].연도, 전체수강학기[i].계절))
# TODO - 예외 처리 (학기 선택 번호 범위)
선택학기 = 전체수강학기[int(input())]
print("%d년 %s학기를 선택하셨습니다." % (선택학기.연도, 선택학기.계절))
print("추가할 강의의 명칭을 입력하세요. (예: 서양 철학의 이해)")
강의명 = input()
print("추가할 강의의 학점을 입력하세요. (예: 3)")
학점 = int(input())
print("추가할 강의의 평점을 입력하세요. 그냥 엔터를 치시면 평균평점에 반영되지 않습니다. (예: A+)")
평점 = input()
# TODO - 예외 처리 (평점 재입력 가능하게)
if 평점=='':
평점 = None
else:
assert 평점 in 평점대응목록
추가강의 = 강의(강의명, 선택학기, 학점=학점, 평점=평점)
print(추가강의)
print("을(를) 추가할까요? [y/n]")
추가여부 = input()
if 추가여부=='y':
선택학기.강의추가(추가강의)
else:
del 추가강의
print("취소되었습니다.")
time.sleep(0.5)
elif 입력모드==3:
print("정보를 확인할 학기 번호를 선택하세요.")
for i in range(len(전체수강학기)):
print("%d: %d년 %s학기" % (i, 전체수강학기[i].연도, 전체수강학기[i].계절))
# TODO - 예외 처리 (학기 선택 번호 범위)
선택학기 = 전체수강학기[int(input())]
print("%d년 %s학기를 선택하셨습니다." % (선택학기.연도, 선택학기.계절))
for 수강강의 in 선택학기.수강강의목록:
print(수강강의)
print()
선택학기.통계()
print("돌아가려면 엔터를 누르세요...")
엔터 = input()
elif 입력모드==0:
break