forked from cmygray/FDS-101
-
Notifications
You must be signed in to change notification settings - Fork 0
/
functions.py
93 lines (70 loc) · 2.28 KB
/
functions.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
import openpyxl
from pickle import *
import math
from functools import reduce
def average(scores):
return reduce(
lambda a, b:
a + b,
scores)/len(scores)
def variance(scores, avrg):
return round(
reduce(
lambda a, b:
a + b,
map(
lambda s:
(s-avrg)**2,
scores))/len(scores),
1)
def std_dev(variance):
return round(
math.sqrt(variance),
1)
def get_data_from_excel(filename):
'''
get_data_from_excel(filename) -> {'name1' : 'score1', 'name2' : 'score2', ....}
엑셀 파일에서 데이터를 가져옵니다.
반환 값은 key가 학생 이름이고 value가 점수인 딕셔너리입니다.
'''
dic = {}
wb = openpyxl.load_workbook(filename)
ws = wb.active
g = ws.rows
for name, score in g:
dic[name.value] = score.value
return dic
#openpyxl이 없으신 분들을 위한 파일 로드 함수
def get_data_from_file(filename):
raw_data = {}
f = open(filename, 'rb')
try:
while True:
data = load(f)
raw_data.update(data)
except EOFError:
pass
return raw_data
def evaluateClass(avrg, total_avrg, std_dev, sd):
'''
evaluateClass(avrg, total_avrg, std_dev, sd) -> None
avrg : 반 성적 평균
total_avrg : 학년 전체 성적 평균
std_dev : 반의 표준 편차
sd : 원하는 표준 편차 기준
'''
if avrg <total_avrg and std_dev >sd:
print("성적이 너무 저조하고 학생들의 실력 차이가 너무 크다.")
elif avrg > total_avrg and std_dev >sd:
print("성적은 평균이상이지만 학생들 실력 차이가 크다. 주의 요망!")
elif avrg < total_avrg and std_dev <sd:
print("학생들간 실력차는 나지 않으나 성적이 너무 저조하다. 주의 요망!")
elif avrg > total_avrg and std_dev <sd:
print("성적도 평균 이상이고 학생들의 실력차도 크지 않다.")
#만약 이 파일을 메인으로 실행 : if 문 아래가 실행
#모듈로 임포트 되는 경우 : if 문 아래가 실행 안됨
#라이브러리일 때 : 테스트 코드
if __name__ == "__main__":
li = [3, 5, 6, 8, 2]
avrg = average(li)
print(avrg)