Schüler hinzufügen
Teil des Abschnitts Logik und Ablaufsteuerung der R-Journey von Coddy. Lektion 22 von 64.
In diesem Projekt erstellst du ein Notenbuch, das Befehle liest, einen pro Zeile, und auf jeden einzelnen antwortet. In fünf Schritten lernt es, Schülerinnen und Schüler hinzuzufügen, Noten einzutragen, Durchschnittswerte zu melden und die beste Schülerin bzw. den besten Schüler zu finden. Jeder Schritt erweitert dieselbe Funktion gradebook(commands).
ADD ada
GRADE ada 90
AVG ada
REPORT
TOPDie Noten befinden sich in einer benannten Liste: Der Name jedes Schülers wird einem numerischen Vektor mit den Noten dieses Schülers zugeordnet. Eine Liste passt, weil jeder Schüler mehrere Werte besitzt.
grades <- list()
grades[["ada"]] <- numeric(0)
grades[["ada"]] <- c(grades[["ada"]], 90)
print(length(grades[["ada"]]))
print(names(grades))Ausgabe:
[1] 1
[1] "ada"numeric(0) ist ein leerer numerischer Vektor. Das Zuweisen von c() würde hier nicht funktionieren: Es ist NULL, und das Zuweisen von NULL entfernt einen Listeneintrag.
Jeder Befehl wird an Leerzeichen aufgeteilt, daher ist parts[1] der Befehl und parts[2] der Name. Eine Kette aus if / else if wählt aus, was zu tun ist:
for (cmd in commands) {
parts <- strsplit(cmd, " ")[[1]]
name <- parts[2]
if (parts[1] == "ADD") {
# ADD behandeln
}
}Die Antworten werden mit replies <- c(replies, ...) gesammelt und am Ende zurückgegeben.
Aufgabe
EinfachVervollständige gradebook(commands) für den ersten Befehl:
ADD <name>: Wenn der Student neu ist, speichere ihn ohne Noten und antworte mitadded <name>. Wenn der Name bereits gespeichert ist, antworte mit<name> already exists.
Der bereitgestellte Code übergibt jede Eingabezeile als einen Befehl an gradebook() und gibt jede zurückgegebene Antwort in einer eigenen Zeile aus. Ein Name ist ein kleingeschriebenes Wort, und die Eingabe enthält nur die bisher beschriebenen Befehle.
Probier es selbst
gradebook <- function(commands) {
grades <- list()
replies <- c()
for (cmd in commands) {
parts <- strsplit(cmd, " ")[[1]]
name <- parts[2]
# Schreibe deinen Code hier
}
replies
}
# Mitgelieferter Ein-/Ausgabe-Code: belasse ihn wie er ist
input <- suppressWarnings(readLines(file("stdin")))
cat(gradebook(input), sep = "\n")
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik und Ablaufsteuerung
1Strings im Detail
Teilstrings mit substr()Formatierung mit sprintf()Aufteilen und VerbindenStrings durchsuchenText ersetzenWiederholung – Benutzernamen-Generator4Matrizen
Matrizen erstellenMatrizen indizierenZusammenfassungen von Zeilen und SpaltenMatrizenarithmetikRückblick – Sitzplan10Fortgeschrittener Kontrollfluss
Die switch()-FunktionVektorisierter ifelse()repeat und breakRekursive FunktionenRückblick – Notenklassifizierung2Schlüssel-Wert-Suchen
Benannte Vektor-SuchenSchlüssel prüfenSchlüssel hinzufügen und entfernenNamen durchlaufenRückblick – Aktienübersicht5Projekt – Notenbuch
Schüler hinzufügenNoten eintragen3Mengen und Zählen
Eindeutige WerteMengenoperationenZugehörigkeitstestsZählen mit table()Rückblick – Gäste einer Veranstaltung6Funktionen als Werte
Anonyme FunktionenFunktionen übergebenFunktionen zurückgebenClosures mit ZustandRückblick – Rabattregeln9Datenrahmen
Datenrahmen erstellenSpalten und ZeilenZeilen filternHinzufügen und SortierenZusammenfassung – Verkaufsbericht12Projekt – Ausgaben-Tracker
Ausgaben erfassenGesamtausgabenÜbe selbstständig: Online-R-Compiler