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 zeilenweise einliest und auf jeden einzelnen antwortet. In fünf Schritten lernt es, Schüler hinzuzufügen, Noten einzutragen, Durchschnittswerte auszugeben und 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 ist einem numerischen Vektor mit den Noten dieses Schülers zugeordnet. Eine Liste eignet sich dafür, weil jeder Schüler mehrere Werte hat.
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. c() zuzuweisen würde hier nicht funktionieren: Es ist NULL, und die Zuweisung von NULL entfernt einen Listeneintrag.
Jeder Befehl wird an Leerzeichen aufgeteilt, daher ist parts[1] der Befehl und parts[2] der Name. Eine if-/else if-Kette wählt aus, was zu tun ist:
for (cmd in commands) {
parts <- strsplit(cmd, " ")[[1]]
name <- parts[2]
if (parts[1] == "ADD") {
# ADD verarbeiten
}
}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 Schüler 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 besteht aus einem kleingeschriebenen 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
}
# Vorgegebener Eingabe-/Ausgabecode: Lass ihn unverändert
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