Menu
Coddy logo textTech

Schülerdurchschnitte

Teil des Abschnitts Logik und Ablaufsteuerung der R-Journey von Coddy. Lektion 24 von 64.

challenge icon

Aufgabe

Einfach

Füge den Befehl AVG hinzu. Alle Befehle aus den vorherigen Schritten müssen weiterhin genau wie zuvor funktionieren.

  • AVG <name>: Antworte bei einem unbekannten Schüler mit no student <name>, bei einem Schüler ohne Noten mit <name>: no grades und andernfalls mit <name>: , gefolgt vom Mittelwert seiner Noten mit einer Nachkommastelle, zum Beispiel ada: 88.8.

Eine Hilfsfunktion, die einen Vektor von Punktzahlen in no grades oder den formatierten Mittelwert umwandelt, wird im nächsten Schritt wieder nützlich sein.

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]
    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))
      }
    }
  }
  replies
}

# Bereitgestellter Ein-/Ausgabe-Code: belasse ihn wie er ist
input <- suppressWarnings(readLines(file("stdin")))
cat(gradebook(input), sep = "\n")

Alle Lektionen in Logik und Ablaufsteuerung

Übe selbstständig: Online-R-Compiler