Menu
CoddyTech

Beste Schüler

Teil des Abschnitts Logik und Ablauf der Ruby-Journey von Coddy. Lektion 53 von 56.

Abschließende Methode: Finde alle Studierenden, deren Durchschnittsnote über einem bestimmten Schwellenwert liegt.

Dies ist Ihre Datenpipeline in voller Stärke: iterieren, nach einem abgeleiteten Wert filtern, Namen zurückgeben.

challenge icon

Aufgabe

Mittel

Füge eine Methode top_students(threshold) hinzu, die ein Array von Namen zurückgibt, deren Durchschnittsnote größer als threshold ist. Verwende average_grade intern wieder, berechne die Mathematik nicht neu. Überspringe Schüler ohne Noten (ihr Durchschnitt ist 0 und wird keinen positiven Schwellenwert bestehen).

Namen sollten in der Reihenfolge des Einfügens erscheinen; wenn sich niemand qualifiziert, gib [] zurück.

Ersetze den Testblock durch:

add_student("Alice", 20, ["Math"])
add_student("Bob",   22, ["Biology"])
add_student("Cara",  19, ["Physics"])
add_grade("Alice", 90)
add_grade("Alice", 85)
add_grade("Bob",   70)
add_grade("Cara",  60)
puts top_students(80).inspect
puts top_students(50).inspect
puts top_students(100).inspect

Die erwartete Ausgabe endet mit:

["Alice"]
["Alice", "Bob", "Cara"]
[]

Probier es selbst

$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)
  unless $student_records.key?(name)
    puts "Student '#{name}' not found."
    return nil
  end
  grades = $student_records[name][:grades]
  return 0 if grades.empty?
  grades.sum.to_f / grades.length
end

def list_by_course(course)
  $student_records.select { |_, info| info[:courses].include?(course) }.keys
end

# TODO: def top_students(threshold), Namen deren average_grade > threshold ist

add_student("Alice", 20, ["Math"])
add_student("Bob",   22, ["Biology"])
add_student("Cara",  19, ["Physics"])
add_grade("Alice", 90)
add_grade("Alice", 85)
add_grade("Bob",   70)
add_grade("Cara",  60)
puts top_students(80).inspect
puts top_students(50).inspect
puts top_students(100).inspect
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik und Ablauf

Übe selbstständig: Online-Ruby-Compiler