본문 바로가기
프로그램

[파이썬] 문제 : 학생 성적 딕셔너리로 계산하기

by 오디세이99 2023. 4. 9.
728x90
반응형

student = [{'no':1, 'name':'길동01', 'kor':62, 'eng':75, 'mat':42}
            ,{'no':2, 'name':'길동02', 'kor':97, 'eng':89, 'mat':63}
            ,{'no':3, 'name':'길동03', 'kor':95, 'eng':76, 'mat':64}
            ,{'no':4, 'name':'길동04', 'kor':70, 'eng':86, 'mat':79}
            ]

def cal_Score(sc):              # score를 구분하는 함수. (문제에 정확한 정의가 없음)
    rtn = ''
    if sc >= 90:
        rtn = 'A'
    elif sc >= 80 and sc < 90:
        rtn = 'B'
    elif sc >= 70 and sc < 80:
        rtn = 'C'
    elif sc >= 60 and sc < 70:
        rtn = 'D'
    elif sc >= 50 and sc < 60:
        rtn = 'E'
    elif sc < 60:
        rtn = 'F'
    return rtn


d_sum = []              # 각 학생마다 합계 저장 리스트. 나중에 출력(합계,평균,최고,최저 에서 같은 방법 사용하기 위해서)
d_avg = []              # 각 학생마다 평균 저정 리스트
d_kor = []
d_eng = []
d_mat = []
print(f"no        name      kor     eng     mat     tot     avg     score")         # 출력 제목
print('-'*66)                          # '-'를 66개 출력
for i in range(len(student)):              # 각 학생의 계산을 위한 반복문, .len(no) 하면 학생수
    p_sum = student[i]['kor'] + student[i]['eng'] + student[i]['mat']  # 한 학생의 성적 합계
    p_avg = p_sum / 3                 # 한 학생의 평균
    score = cal_Score(p_avg)          # score 구함
    print(f"{student[i]['no']:2d}        {student[i]['name']:4} {student[i]['kor']:5d} {student[i]['eng']:7d} {student[i]['mat']:7d} {p_sum:8d}    {p_avg:3.2f}    {score:}")
    d_sum.append(p_sum)                # 학생의 합계 리스트에 보관
    d_avg.append(p_avg)                # 학생의 평균 리스트에 보관
    d_kor.append(student[i]['kor'])
    d_eng.append(student[i]['eng'])
    d_mat.append(student[i]['mat'])

# d_kor = student['kor']
# d_eng = student['eng']
# d_mat = student['mat']
print('-'*66)
print(f"{0:2d}        {'합계':4} {sum(d_kor):5d} {sum(d_eng):7d} {sum(d_mat):7d} {sum(d_sum):8d}    {sum(d_avg):3.2f}")
cnt = len(no)
print(f"{0:2d}        {'평균':4} {sum(d_kor)//cnt:5d} {sum(d_eng)//cnt:7d} {sum(d_mat)//cnt:7d} {sum(d_sum)//cnt:8d}    {sum(d_avg)//cnt:3.2f}")
print(f"{0:2d}        {'최고':4} {max(d_kor):5d} {max(d_eng):7d} {max(d_mat):7d} {max(d_sum):8d}    {max(d_avg):3.2f}")
print(f"{0:2d}        {'최저':4} {min(d_kor):5d} {min(d_eng):7d} {min(d_mat):7d} {min(d_sum):8d}    {min(d_avg):3.2f}")

728x90
반응형

댓글