Menu
Coddy logo textTech

평균 성적

Coddy Ruby 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 51번째.

학생 성적의 평균을 반환하는 메서드를 추가하세요. 이는 정확히 Enumerable이 설계된 목적인 요약 계산의 한 종류입니다.

두 가지 예외 상황에 주의하세요: 학생이 존재하지 않는 경우와 학생에게 아직 성적이 없는 경우입니다.

challenge icon

챌린지

쉬움

다음 기능을 수행하는 average_grade(name) 메서드를 추가하세요:

  1. 이름이 존재하지 않으면 Student '<name>' not found.를 출력하고 nil을 반환합니다.
  2. 학생은 존재하지만 성적이 없는 경우 0을 반환합니다.
  3. 그렇지 않으면 :grades의 산술 평균을 Float 형식으로 반환합니다.

테스트 블록을 다음으로 교체하세요:

add_student("Alice", 20, ["Math"])
add_student("Bob",   22, ["Biology"])
add_grade("Alice", 90)
add_grade("Alice", 80)
puts average_grade("Alice")
puts average_grade("Bob")
puts average_grade("Charlie").inspect

예상 출력:

Student 'Alice' added.
Student 'Bob' added.
Grade 90 added for 'Alice'.
Grade 80 added for 'Alice'.
85.0
0
Student 'Charlie' not found.
nil

치트 시트

컬렉션에서 평균을 계산할 때 발생할 수 있는 예외 상황(edge cases)을 처리합니다:

def average_grade(name)
  student = @students.find { |s| s[:name] == name }
  if student.nil?
    puts "Student '#{name}' not found."
    return nil
  end
  grades = student[:grades]
  return 0 if grades.empty?
  grades.sum.to_f / grades.size
end
  • .find를 사용하여 레코드를 찾습니다. 찾지 못한 경우 nil을 반환합니다.
  • 나눗셈을 하기 전에 .empty?를 사용하여 빈 컬렉션인지 확인하는 가드 구문을 작성합니다.
  • 합계(또는 크기)에 .to_f를 사용하여 결과가 Float 타입이 되도록 합니다.

직접 해보기

$student_records = {}

def add_student(name, age, courses)
  if $student_records.key?(name)
    puts "Student '#{name}' already exists."
    return
  end
  $student_records[name] = { age: age, grades: [], courses: courses }
  puts "Student '#{name}' added."
end

def add_grade(name, grade)
  unless $student_records.key?(name)
    puts "Student '#{name}' not found."
    return
  end
  $student_records[name][:grades] << grade
  puts "Grade #{grade} added for '#{name}'."
end

# 할 일: def average_grade(name), 존재하지 않는 학생 처리, 빈 성적 처리, Float 평균 반환

add_student("Alice", 20, ["Math"])
add_student("Bob",   22, ["Biology"])
add_grade("Alice", 90)
add_grade("Alice", 80)
puts average_grade("Alice")
puts average_grade("Bob")
puts average_grade("Charlie").inspect
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직 및 흐름의 모든 레슨