Menu
CoddyTech

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
TOP

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

challenge icon

Aufgabe

Einfach

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

  • ADD <name>: Wenn der Schüler 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 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")
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