본문 바로가기
실버를 위한 코딩/파이썬 연습

[파이썬 연습] 수학경시대회 학생 선발

by forSilver 2024. 6. 30.
반응형

수학경시대회 학생 선발

이 코드의 목적은 수학 성적이 85점 이상인 학생들을 선별하고, 이 학생들의 세 과목 총합 점수를 계산하여 총합 점수가 높은 순으로 정렬한 후, 상위 3명을 선출하여 출력하는 것입니다. 이 과정을 단계별로 설명드리겠습니다.

  1. exam_scores 딕셔너리에서 수학 성적이 85점 이상인 학생들을 선별합니다.
  2. 선별된 학생들의 세 과목 성적의 총합을 계산합니다.
  3. 총합 점수가 높은 순으로 정렬합니다.
  4. 상위 3명을 선출하여 순위를 매겨 출력합니다.

코딩 부분별 설명

1. 수학 성적 85점 이상인 학생 선별

candidates = dict(filter(lambda x: x[1][0] > 85, exam_scores.items()))

filter 함수를 사용하여 exam_scores 딕셔너리에서 수학 성적이 85점 이상인 학생들만 candidates 딕셔너리에 저장합니다.

2. 학생별로 세 과목 성적의 총합을 계산

candidates = list(map(lambda x: (x[0], sum(x[1])), candidates.items()))

map 함수를 사용하여 각 학생의 세 과목 성적을 더한 총합을 계산합니다. 결과는 리스트 형태로 변환됩니다.

3. 총합이 높은 순으로 정렬

candidates = sorted(candidates, key=lambda x: -x[1])

sorted 함수를 사용하여 총합 점수가 높은 순으로 정렬합니다. key=lambda x: -x[1]는 총합 점수를 기준으로 내림차순 정렬을 의미합니다.

4. 상위 3명 선출

finalists = candidates[:3]

정렬된 리스트에서 상위 3명을 선출합니다.

5. 결과 출력

i = 1
for name, score in finalists:
    print(f"{i}위 진출자: {name} {score}점")
    i += 1

상위 3명의 학생과 그들의 총합 점수를 출력합니다.

전체 코드

exam_scores = {
    "Peter": (100, 82, 77),
    "Tony": (88, 89, 90),
    "Clark": (75, 93, 92),
    "Bruce": (92, 81, 82),
    "James": (79, 90, 88),
    "Scott": (95, 84, 86),
    "Wade": (86, 79, 98),
    "Stephen": (83, 97, 88),
}

# 수학 85점 이상인 학생 선별
candidates = dict(filter(lambda x: x[1][0] > 85, exam_scores.items()))

# 학생별로 세 과목 성적의 총합을 계산
candidates = list(map(lambda x: (x[0], sum(x[1])), candidates.items()))

# 총합이 높은 순으로 정렬
candidates = sorted(candidates, key=lambda x: -x[1])

# 상위 3명 선출
finalists = candidates[:3]

i = 1
for name, score in finalists:
    print(f"{i}위 진출자: {name} {score}점")
    i += 1

 

이 코드를 통해 경시대회 참여할 상위 3명의 학생을 선출하고 출력할 수 있습니다.