Schüler hinzufügen
Teil des Abschnitts Logik und Ablauf der Ruby-Journey von Coddy. Lektion 49 von 56.
Definiere eine Methode add_student, die einen neuen Schüler im gemeinsam genutzten Hash student_records registriert.
Das Ablehnen von Duplikaten ist der einzige Zweig: Sobald ein Schüler bereits existiert, gib dies aus und kehre zurück, ohne ihn zu überschreiben.
Aufgabe
EinfachLass student_records = {} am Anfang deiner Datei stehen. Definiere dann eine Methode add_student(name, age, courses), die Folgendes tut:
- Wenn
namebereits ein Schlüssel instudent_recordsist, gibt sieStudent '<name>' already exists.aus und kehrt zurück. - Andernfalls speichert sie
{ age: age, grades: [], courses: courses }unternameund gibtStudent '<name>' added.aus.
Ersetze am Ende deiner Datei den Testblock durch:
add_student("Alice", 20, ["Math", "Physics"])
add_student("Bob", 22, ["Biology", "Chemistry"])
add_student("Alice", 21, ["Art"])
puts student_records.inspectDie erwartete Ausgabe lautet:
Student 'Alice' added.
Student 'Bob' added.
Student 'Alice' already exists.
{"Alice"=>{:age=>20, :grades=>[], :courses=>["Math", "Physics"]}, "Bob"=>{:age=>22, :grades=>[], :courses=>["Biology", "Chemistry"]}}Da Methoden nicht auf lokale Variablen aus dem einschließenden Skript zugreifen können, deklariere student_records mit $student_records (einer globalen Variable), damit die Methode darauf zugreifen und sie aktualisieren kann. Verwende diesen Namen auch innerhalb der Methode.
Probier es selbst
$student_records = {}
# TODO: def add_student(name, age, courses), Duplikate verhindern,
# { age:, grades: [], courses: } speichern, hinzugefügt/bereits vorhanden ausgeben
add_student("Alice", 20, ["Math", "Physics"])
add_student("Bob", 22, ["Biology", "Chemistry"])
add_student("Alice", 21, ["Art"])
puts $student_records.inspect
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
1Strings im Detail
Überblick über String-MethodenString-InterpolationStrings durchlaufenSplitten und VerbindenRückblick – String Weaver4Blocks, Procs & Lambdas
Was ist ein Block?do..end vs. geschweifte KlammernDas Schlüsselwort yieldBlock-ParameterProcs und LambdasRückblick – Benutzerdefinierter Iterator7Hashes Teil 2
Hash.new mit StandardwertenHashes durchlaufenVerschachtelte HashesZusammenführen und TransformierenRückblick – Häufigkeitszähler10Projekt – Schülerdaten
ProjektübersichtSchüler hinzufügen2Bereiche
Was ist ein Bereich?BereichsmethodenBereiche in Case / WhenWiederholung – Übung zu Bereichen5Das Enumerable-Kraftpaket
Select und RejectMap verkettenReduce / Injectcount, all?, any?, none?group_by und partitionsort_by, min_by, max_byZusammenfassung – Datenpipeline8Fortgeschrittene Entscheidungsfindung
Case mit Klassen & Regexwhen mit mehreren WertenTernärer OperatorInline-if / unlessRückblick – NotenklassifiziererÜbe selbstständig: Online-Ruby-Compiler