Menu
Coddy logo textTech

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
TOP

Die 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.

challenge icon

Aufgabe

Einfach

Vervollständige gradebook(commands) für den ersten Befehl:

  • ADD <name>: Wenn der Student neu ist, speichere ihn ohne Noten und antworte mit added <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")
quiz iconTeste dich selbst

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

Übe selbstständig: Online-R-Compiler