Bester Schüler
Teil des Abschnitts Logik und Ablaufsteuerung der R-Journey von Coddy. Lektion 26 von 64.
Aufgabe
MittelFüge den Befehl TOP hinzu. Jeder Befehl aus den vorherigen Schritten muss weiterhin genau wie zuvor funktionieren.
TOP: Antworte mitTop:, gefolgt von der Person mit dem höchsten Mittelwert und diesem Mittelwert mit einer Dezimalstelle in Klammern, zum BeispielTop: ada (92.0). Personen ohne Noten werden übersprungen. Bei gleichen Mittelwerten wähle die Person, deren Name alphabetisch zuerst kommt. Wenn niemand Noten hat, antworte mitTop: none.
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 ausschließlich die bisher beschriebenen Befehle.
Probier es selbst
average_text <- function(scores) {
if (length(scores) == 0) "no grades" else sprintf("%.1f", mean(scores))
}
gradebook <- function(commands) {
grades <- list()
replies <- c()
for (cmd in commands) {
parts <- strsplit(cmd, " ")[[1]]
name <- parts[2]
if (parts[1] == "ADD") {
if (name %in% names(grades)) {
replies <- c(replies, paste(name, "already exists"))
} else {
grades[[name]] <- numeric(0)
replies <- c(replies, paste("added", name))
}
} else if (parts[1] == "GRADE") {
if (!(name %in% names(grades))) {
replies <- c(replies, paste("no student", name))
} else {
score <- as.numeric(parts[3])
grades[[name]] <- c(grades[[name]], score)
replies <- c(replies, paste("recorded", score, "for", name))
}
} else if (parts[1] == "AVG") {
if (!(name %in% names(grades))) {
replies <- c(replies, paste("no student", name))
} else {
replies <- c(replies, paste0(name, ": ", average_text(grades[[name]])))
}
} else if (parts[1] == "REPORT") {
for (student in sort(names(grades))) {
replies <- c(replies, paste0(student, ": ", average_text(grades[[student]])))
}
replies <- c(replies, paste("Class average:", average_text(unlist(grades))))
}
}
replies
}
# Bereitgestellter Ein-/Ausgabe-Code: belasse ihn unverändert
input <- suppressWarnings(readLines(file("stdin")))
cat(gradebook(input), sep = "\n")
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